Introdução ao Pgvector: Um Guia para Programadores que Exploram Bases de Dados Vectoriais
Com as recentes tendências tecnológicas sobre IA generativa e [modelos de grandes linguagens] (https://zilliz.com/glossary/large-language-models-(llms)), surgiram formas mais eficientes de armazenar e consultar dados. As bases de dados tradicionais, como o MySQL e o PostgreSQL, foram a escolha ideal para os programadores durante anos. No entanto, ultimamente, um novo tipo de base de dados denominado base de dados vetorial tem ganho grande popularidade na comunidade.
Com a extensão pgvector, os programadores podem armazenar eficientemente dados vectoriais no PostgreSQL, permitindo capacidades avançadas de gestão de dados.
Os bancos de dados vetoriais são muito diferentes dos bancos de dados tradicionais, especialmente em relação aos seus casos de uso. Então, neste resumo, vamos explorar o Pgvector, uma extensão do PostgreSQL que permite usar armazenamento vetorial com um banco de dados PostgreSQL. Nós também vamos explorar e entender as limitações do Pgvector, como ele difere de bancos de dados vetoriais especializados, e como e onde você pode usar bancos de dados vetoriais para suas aplicações.
Se é um programador familiarizado com bases de dados tradicionais e procura novas soluções, este guia fornecerá os conhecimentos necessários para começar a utilizar o Pgvector. Também o ajudará a explorar outras [bases de dados vectoriais] dedicadas (https://zilliz.com/learn/what-is-vetor-database) como alternativa ao Pgvector.
A IA e a aprendizagem automática são agora amplamente utilizadas em vários sectores, incluindo a tecnologia, as TI, a medicina e os automóveis. Nestes domínios, os dados são representados como vectores que contêm valores numéricos que captam propriedades e caraterísticas de dados não estruturados, como imagens ou textos. Os algoritmos de aprendizagem automática utilizam estes vectores como entrada para aprender padrões e relações dentro dos dados.
O Pgvector é uma extensão de código aberto do PostgreSQL, uma base de dados relacional tradicional de código aberto. Suporta o armazenamento e a pesquisa de vectores do processamento de linguagem natural ou de modelos de aprendizagem profunda sobre o PostgreSQL. Ou, pode simplesmente ver o Pgvector como uma extensão da base de dados vetorial do PostgreSQL.
Uma das melhores coisas sobre trabalhar com o Pgvector é que ele é semelhante a trabalhar com um banco de dados SQL tradicional como o PostgreSQL. A sintaxe para operações vetoriais, como a criação de colunas vetoriais, a criação de uma nova tabela com colunas vetoriais e a obtenção dos vizinhos L2 mais próximos, é a mesma.
Quer esteja a trabalhar em aplicações de IA, sistemas de recomendação ou qualquer outro projeto que envolva dados de elevada dimensão, compreender a base de dados Pgvector - e outras bases de dados vectoriais - pode alargar os seus horizontes na gestão de bases de dados. Também permite o armazenamento eficiente de valores vectoriais sem exigir um conhecimento extenso de armazenamento vetorial e de bases de dados.
Agora, vamos começar configurando o Pgvector para integrá-lo ao PostgreSQL. Certifique-se de ter o PostgreSQL instalado no seu sistema. Para Mac, você pode instalá-lo facilmente via Homebrew:
brew install postgresql
Pode verificar rapidamente se tem o PostgreSQL instalado, executando o seguinte comando:
psql --versão
Então, ele deve dar a versão do PostgreSQL instalada no seu sistema como mostrado abaixo:
Você também precisará instalar o make. Pode instalá-lo facilmente usando o Homebrew, executando o seguinte comando:
brew install make
Então, ele deve instalar o make no seu sistema como mostrado abaixo:
Antes de mergulhar no mundo das bases de dados vectoriais, terá de configurar o Pgvector e integrá-lo com o PostgreSQL. Vamos percorrer os passos necessários.
- Clone o repositório do Pgvector.
cd /tmp && git clone --branch v0.4.4 https://github.com/pgvector/pgvector.git
- Vá para este diretório e execute os seguintes comandos
make:
cd pgvector && make && make install
Integrando o Pgvector com o Postgres
Abra a interface de linha de comando do PostgreSQL (psql) usando o seguinte comando. Este passo iniciará o Postgres na sua linha de comando para que você possa executar comandos do Postgres diretamente no seu terminal:
psql
Pode criar um utilizador para utilizar o Postgres utilizando o seguinte comando:
CREATE USER <user> WITH PASSWORD <password>
Em seguida, faça login nesse usuário usando as credenciais criadas no comando acima. Ou, também é possível fazer login no Postgres como um superusuário:
psql -U postgres
Agora, vamos criar um novo banco de dados para trabalhar com o seguinte comando:
criar base de dados vectordb;
Vamos selecionar esta base de dados:
/c vectordb;
Depois, vamos ativar a extensão Pgvector para a nossa base de dados vectordb:
criar extensão pgvector;
Só é necessário efetuar este passo uma vez para cada base de dados que pretenda utilizar com Pgvector.
Exemplo de Pgvector
Vamos criar duas colunas de vetores, id e embedding, em uma tabela chamada vectors. A tabela e as colunas armazenam os dados do vetor no PostgreSQL.
CREATE TABLE vectores (
id SERIAL PRIMARY KEY,
embedding float4[] -- A coluna do vetor
);
Agora podemos inserir alguns dados vetoriais na nossa tabela vectors:
INSERT INTO vectors (embedding) VALUES
('{1.2, 0.8, -2.1}'),
('{-0.7, 2.4, 3.6}');
Para visualizar a tabela, podemos simplesmente executar a consulta SELECT * na nossa tabela vectores.
SELECT * FROM vectores;
Usando Pgvector para pesquisa de similaridade de vetores
Discutimos como os bancos de dados vetoriais podem ser benéficos para realizar pesquisas de similaridade. Veja como escrever uma consulta de pesquisa de similaridade simples para encontrar vetores semelhantes a um determinado vetor de consulta.
SELECT * FROM vectores
WHERE pgvector_cosine(embedding, '{0.9, -0.3, 1.8}') > 0.8;
Utilizamos a consulta regular SELECT * com uma cláusula WHERE. Depois, utilizamos a função pgvector_cosine para especificar que queremos obter linhas em que a semelhança de cosseno entre a coluna do vetor embedding e o vetor de consulta {0.9, -0.3, 1.8} seja superior a 0.8.
Introdução às bases de dados vectoriais
O que é um banco de dados vetorial?
Um banco de dados vetorial é um tipo especializado de banco de dados projetado para armazenar, gerenciar e consultar dados vetoriais de alta dimensão com eficiência. Ao contrário dos bancos de dados tradicionais, que são otimizados para dados estruturados, como texto e números, os bancos de dados vetoriais são adaptados para lidar com tipos de dados complexos usados no aprendizado de máquina e no processamento de linguagem natural. Estas bases de dados são excelentes na realização de pesquisas de semelhança, em que o objetivo é encontrar vectores semelhantes a um determinado vetor de consulta com base em métricas de distância específicas.
As bases de dados vectoriais são cruciais em aplicações que requerem o armazenamento e a recuperação de dados vectoriais, como o reconhecimento de imagens, os sistemas de recomendação e a [pesquisa semântica] (https://zilliz.com/glossary/semantic-search). Tirando partido de técnicas de indexação avançadas, as bases de dados vectoriais podem recuperar vectores relevantes de forma rápida e precisa, o que as torna indispensáveis para os programadores que trabalham com IA e modelos de aprendizagem automática.
Benefícios dos bancos de dados vetoriais para desenvolvedores
Os bancos de dados vetoriais oferecem várias vantagens significativas para os desenvolvedores:
Armazenamento e recuperação eficientes: Eles são otimizados para armazenar e recuperar dados vetoriais de alta dimensão de forma eficiente, garantindo que mesmo grandes conjuntos de dados possam ser gerenciados de forma eficaz.
Pesquisas de similaridade rápidas e precisas**: As bases de dados de vectores suportam pesquisas de semelhança rápidas, permitindo aos programadores encontrar rapidamente os vectores mais relevantes. Isto é essencial para aplicações como sistemas de recomendação e reconhecimento de imagens.
Suporte para várias métricas de distância e algoritmos**: Oferecem flexibilidade na escolha de diferentes métricas de distância (por exemplo, similaridade de cosseno, distância euclidiana) e algoritmos para atender a necessidades específicas de aplicações.
Escalabilidade e flexibilidade**: As bases de dados vectoriais podem lidar com conjuntos de dados em grande escala, tornando-as adequadas para aplicações que requerem a gestão de milhões ou mesmo milhares de milhões de vectores.
Integração com linguagens de programação e estruturas populares**: Oferecem uma integração perfeita com várias linguagens e estruturas de programação, permitindo que os programadores incorporem facilmente as funcionalidades das bases de dados vectoriais nos seus fluxos de trabalho existentes.
Ao tirar partido destas vantagens, os programadores podem criar aplicações mais eficientes e escaláveis que requerem capacidades avançadas de gestão de dados vectoriais e de pesquisa de semelhanças.
Compreender os dados vectoriais
O que são dados vetoriais?
Dados vetoriais são um tipo de dados representados como uma lista de números, conhecida como vetor. Cada número no vetor corresponde a um recurso ou atributo específico dos dados que estão sendo representados. Os vectores são versáteis e podem ser utilizados para representar uma vasta gama de tipos de dados, incluindo texto, imagens, áudio, entre outros. No contexto da aprendizagem automática e do processamento de linguagem natural, os vectores representam frequentemente o significado semântico de palavras, frases ou documentos inteiros.
Uma das principais caraterísticas dos dados vectoriais é a sua elevada dimensionalidade. Os vectores podem ter milhares ou mesmo milhões de dimensões, captando detalhes e relações intrincados nos dados. Esta elevada dimensionalidade coloca desafios às bases de dados tradicionais, que não estão optimizadas para armazenar e consultar estruturas de dados tão complexas.
As bases de dados vectoriais respondem a estes desafios fornecendo mecanismos eficientes de armazenamento e recuperação especificamente concebidos para dados vectoriais de elevada dimensão. Permitem que os programadores efectuem pesquisas de semelhança de vectores, em que o objetivo é encontrar vectores semelhantes a um determinado vetor de consulta com base em critérios específicos. Esta capacidade é essencial para aplicações como o reconhecimento de imagens, sistemas de recomendação e processamento de linguagem natural, em que a compreensão e o aproveitamento das relações entre pontos de dados são cruciais.
Ao utilizar bases de dados de vectores, os programadores podem armazenar e consultar dados de vectores de forma eficiente, abrindo novas possibilidades para a criação de aplicações avançadas de IA e aprendizagem automática.
Índice e limitações do Pgvector
Embora o Pgvector seja uma ótima maneira de armazenar e pesquisar vetores, ele tem algumas desvantagens óbvias.
Pgvector tem problemas de escalabilidade quando se trata de lidar com vetores de alta dimensão. O armazenamento de dados vectoriais pode também introduzir custos adicionais de armazenamento e indexação. Também é importante considerar o espaço que os dados vetoriais precisam e como isso pode afetar o desempenho da consulta.
Além disso, o Pgvector suporta apenas um tipo de índice denominado [IVFFlat] (https://zilliz.com/learn/choosing-right-vetor-index-for-your-project#Inverted-file-index-IVF). Esta limitação afecta as propriedades dos vectores, bem como o tamanho dos conjuntos de dados que armazena. Significa também que não existe uma otimização de armazenamento predefinida com um índice Pgvector.
Em resumo, Pgvector é uma extensão do PostgreSQL que permite o armazenamento e busca de embeddings vetoriais. No entanto, tem capacidades e desempenho limitados. Felizmente, muitos bancos de dados vetoriais dedicados como Milvus estão disponíveis hoje que fazem um trabalho muito melhor devido a índices ou algoritmos melhorados.
Agora que já explorámos o Pgvector e as suas aplicações e desvantagens, vamos introduzir o conceito de bases de dados vectoriais dedicadas.
Ao contrário do Pgvector, um plugin de pesquisa vetorial em cima de uma base de dados tradicional, as bases de dados vectoriais dedicadas como Milvus e Zilliz são construídas de raiz para armazenar e consultar milhões ou mesmo milhares de milhões de dados vectoriais de elevada dimensão com respostas quase em tempo real. Utilizam técnicas de indexação avançadas para tratar eficazmente as pesquisas por semelhança, oferecem um desempenho superior para operações baseadas na semelhança, tratam dados vectoriais em grande escala e fornecem APIs poderosas para aplicações de IA e de aprendizagem automática.
Uma base de dados vetorial dedicada, como a Milvus, serve uma vasta gama de [casos de utilização] (https://zilliz.com/vetor-database-use-cases), incluindo a recuperação de imagens e vídeos por semelhança, o processamento de linguagem natural, os sistemas de recomendação e muito mais. A sua versatilidade torna-a adequada para diversos projectos relacionados com a IA. Vamos entender Milvus e como aproveitá-lo na nuvem usando .
O Milvus é um banco de dados vetorial de código aberto que fornece uma solução robusta para gerenciar e consultar bilhões de vetores de alta dimensão. Oferece inúmeras funcionalidades interessantes, como o índice GPU, Arm64, pesquisa de intervalos, upsert e CDC, que garantem um desempenho e uma experiência de utilizador ideais para a criação de aplicações de IA e de aprendizagem automática. Consulte [o blogue da versão mais recente do Milvus 2.3] (https://milvus.io/blog/unveiling-milvus-2-3-milestone-release-offering-support-for-gpu-arm64-cdc-and-other-features.md) para obter mais informações sobre estas funcionalidades.
O Zilliz Cloud opera como um serviço baseado em nuvem que traz as instâncias do Milvus para o domínio do software como serviço (SaaS). Simplifica a implementação e a gestão das bases de dados Milvus, oferecendo uma infraestrutura de nuvem, escalabilidade e suporte operacional. Zilliz garante que os programadores podem aproveitar as capacidades do Milvus sem a complexidade de configurar e manter a sua infraestrutura. É como usar o Amazon RDS para PostgreSQL na nuvem.
O Zilliz Cloud oferece um nível gratuito, dando a todos os programadores igual acesso a este serviço de base de dados vetorial. O nível gratuito oferece até duas colecções, cada uma acomodando até 500.000 vectores com 768 dimensões e ainda mais numa escala mais pequena. Esta capacidade generosa permite capacidades significativas de tratamento de dados sem exigir investimentos em infra-estruturas.
Ao atualizar para o Postgres 12, certifique-se de que o vetor de extensão é gerido corretamente para manter a compatibilidade e a funcionalidade.
Como escolher entre Milvus e Zilliz
Se pretender ter controlo total sobre a sua base de dados, pode optar por instâncias Milvus auto-hospedadas. No entanto, deve implementar e gerir a sua infraestrutura de acordo com as suas necessidades e casos de utilização.
Por outro lado, se preferir utilizar uma base de dados vetorial baseada na nuvem, pode utilizar Zilliz Cloud. O Zilliz permite-lhe concentrar-se na criação da sua aplicação, tirando partido do Milvus na nuvem, sem se preocupar com a manutenção da infraestrutura.
O Milvus e o Zilliz permitem aos programadores uma gestão eficiente dos dados vectoriais, mas satisfazem diversas preferências de implementação. Quer se incline para a flexibilidade auto-hospedada ou para a simplicidade baseada na nuvem, a colaboração Milvus-Zilliz oferece opções alinhadas com as exigências do seu projeto.
Pgvector vs. Milvus e Zilliz: Uma comparação de bases de dados vectoriais
Agora, vamos comparar o Pgvector com o Milvus/Zilliz em relação à facilidade de uso, desempenho e flexibilidade.
O Pgvector integra-se perfeitamente com o PostgreSQL, que é familiar para os programadores que já utilizam a base de dados relacional. No entanto, Milvus e Zilliz exigem configurações adicionais para instalar seus SDKs e APIs. A boa notícia é que, uma vez configurado o Milvus/Zilliz, a criação de um serviço de pesquisa de semelhanças em grande escala demora menos de um minuto. Além disso, estão disponíveis SDKs simples e intuitivos para várias linguagens de programação.
Para além da instalação, há um pouco de curva de aprendizagem ao utilizá-los. O Pgvector parece ser mais fácil de utilizar devido à sua familiaridade com o PostgreSQL.
Análise de Desempenho e Escalabilidade para Pesquisa de Similaridade Vetorial
Uma grande limitação do Pgvector é a sua capacidade limitada de indexação. Para pesquisas de similaridade complexas, o Milvus supera o Pgvector devido aos seus mecanismos de indexação optimizados, como demonstrado em this benchmark.
O Milvus utiliza a pesquisa approximate nearest neighbor para melhorar o desempenho da consulta, oferecendo tempos de resposta mais rápidos, sacrificando alguma precisão em comparação com a pesquisa exacta do vizinho mais próximo.
O Pgvector e o Milvus são poderosas pilhas de pesquisa vetorial concebidas para lidar eficientemente com dados vectoriais em grande escala. No entanto, o Milvus/Zilliz é mais escalável e pode lidar com conjuntos de dados com milhares de milhões de incorporações vectoriais.
Conjuntos de caraterísticas e flexibilidade em embeddings vectoriais
Enquanto o Pgvector traz recursos vetoriais para o PostgreSQL, o Milvus/Zilliz é um banco de dados vetorial criado especificamente com recursos especializados adaptados para aplicativos de IA. São mais ricas em funcionalidades e podem ser mais úteis para [casos de utilização de bases de dados vectoriais] personalizadas (https://zilliz.com/vetor-database-use-cases).
A VectorDBBench é uma ferramenta de avaliação comparativa de código aberto para bases de dados vectoriais. Compara as principais bases de dados vectoriais e os serviços em nuvem disponíveis no mercado e fornece resultados de referência imparciais relativamente a consultas por segundo (QPS), consultas por dólar (QP$) e latência P99.
Por exemplo, é possível utilizar o VectorDBBench para comparar o Pgvector com o Milvus ou o Zilliz. De acordo com os resultados da avaliação comparativa, [Milvus e Zilliz superam o Pgvector] (https://zilliz.com/vetor-database-benchmark-tool#comparison-section) em relação ao QPS e à latência.
Nota: Esta é uma pontuação de 1-100 baseada no desempenho de cada sistema em casos diferentes de acordo com uma regra específica. Uma pontuação mais elevada denota um melhor desempenho.
Nota: Trata-se de uma pontuação >1 baseada no desempenho de cada sistema em casos diferentes de acordo com uma regra específica. Uma pontuação mais baixa denota um melhor desempenho.
Com o VectorDBBench, pode compreender rapidamente qual a base de dados com melhor desempenho em termos de várias métricas. Pode também determinar qual a base de dados que melhor se adapta às suas necessidades específicas.
O Pgvector abre novas possibilidades para armazenar e consultar dados vetoriais no PostgreSQL. Se já estiver familiarizado com o PostgreSQL e quiser explorar bases de dados vectoriais, o Pgvector é um excelente ponto de partida. No entanto, para aplicações de IA com milhões ou até bilhões de pesquisas de similaridade de vetores, o desempenho do Pgvector pode não ser suficiente. O Milvus e o Zilliz oferecem recursos especializados que otimizam o desempenho. Considere os requisitos do seu projeto e explore esses bancos de dados vetoriais para desbloquear todo o potencial do armazenamento vetorial em seus aplicativos.
*Este post foi escrito por Siddhant Varma. Siddhant é um desenvolvedor JavaScript full-stack com experiência em engenharia front-end. Ele trabalhou com o escalonamento de várias startups na Índia e tem experiência na construção de produtos nos setores de Ed-Tech e saúde. Siddhant tem uma paixão pelo ensino e um talento especial para escrever. Também ensinou programação a muitos licenciados, ajudando-os a tornarem-se melhores futuros programadores.
Última atualização: 23 de janeiro de 2024
Continue lendo

My Wife Wanted Dior. I Spent $600 on Claude Code to Vibe-Code a 2M-Line Database Instead.
Write tests, not code reviews. How a test-first workflow with 6 parallel Claude Code sessions turns a 2M-line C++ codebase into a daily shipping pipeline.

Why Context Engineering Is Becoming the Full Stack of AI Agents
Context engineering integrates knowledge, tools, and reasoning into AI agents—making them smarter, faster, and production-ready with Milvus.
Milvus/Zilliz + Surveillance: How Vector Databases Transform Multi-Camera Tracking
See how Milvus vector database enhances multi-camera tracking with similarity-based matching for better surveillance in retail, warehouses and transport hubs.
