Bancos de Dados Vetoriais
Um banco de dados vetorial armazena e gerencia dados como vetores de alta dimensão, frequentemente gerados como outputs de redes neurais para representar dados não estruturados (texto, imagens, áudio, etc.) de forma compacta. Dessa maneira, a similaridade entre dados é interpretada pela proximidade (distância) de seus vetores, o que contrasta com a natureza de bancos de dados tradicionais, onde a relação entre dados é representada por um esquema relacional.
Essa abordagem permite utilizar métricas como similaridade de cosseno ou distância euclidiana para representar similaridade em diversas aplicações, como:
- Sistemas de recomendação
- Mecanismos de busca
- Detecção de anomalias
- Genômica e bioinformática
- Busca semântica

KNN e ANN
[editar | editar código]KNN
[editar | editar código]K-Nearest Neighbors (KNN) é um algoritmo que encontra os "k" vetores mais próximos a um vetor de consulta em um espaço multidimensional, baseando-se em métricas de distância para determinar a similaridade.
ANN
[editar | editar código]Para lidar com grandes volumes de dados, são usadas técnicas de Approximate Nearest Neighbors (ANN). Métodos ANN, como HNSW, fazem um compromisso comum em aplicações de alta volumetria, sacrificando um pouco de precisão para obter maior velocidade na busca.
| Algoritmo | Complexidade Computacional (Busca) |
|---|---|
| KNN (Força Bruta) | O(N*D) - N: número de vetores, D: dimensões |
| ANN (Geralmente) | O(log N) ou O(N log N) - Varia dependendo do algoritmo e implementação |
Abordagens Híbridas: pgvector
[editar | editar código]O pgvector é uma extensão de código aberto para o PostgreSQL que adiciona suporte a dados vetoriais e busca de similaridade. Ele permite integrar busca vetorial com as funcionalidades tradicionais de um banco de dados relacional, criando uma abordagem híbrida.
Instalação[1]
[editar | editar código]A instalação geralmente envolve adicionar a extensão a um banco de dados PostgreSQL existente.
Se não tiver PostgreSQL
Para sistemas baseados em Debian/Ubuntu (ajuste a versão do PostgreSQL):
sudo apt-get install postgresql-<version>
Para sistemas baseados em Red Hat/CentOS (ajuste a versão):
sudo yum install postgresql-<version>
Instale pgvector
git clone https://github.com/pgvector/pgvector.git
Para sistemas baseados em Debian/Ubuntu (ajuste a versão do PostgreSQL):
sudo apt-get install postgresql-{{Versão}}-pgvector
Para sistemas baseados em Red Hat/CentOS (ajuste a versão):
sudo yum install postgresql{{Versão}}-contrib
Ou compilando do código fonte:
cd pgvector
make
sudo make install
Após instalar os binários e se conectar ao banco de dados PostgreSQL, usando por exemplo
sudo systemctl start postgresql
(que inicia o banco de dados)
sudo -u postgres psql
(que conecta ao banco de dados)
ative a extensão no banco de dados:
CREATE EXTENSION vector;
Criação de Dados com Vetores
[editar | editar código]Para armazenar vetores, crie uma tabela com uma coluna do tipo vector:
CREATE TABLE documentos (
id SERIAL PRIMARY KEY,
conteudo TEXT,
embedding vector(1024) -- Exemplo com vetores de 1024 dimensões
);
Inserir dados com vetores:
INSERT INTO documentos (conteudo, embedding)
VALUES
('Texto do primeiro documento', '[0.1, 0.2, ..., 0.9]'),
('Conteúdo do segundo documento', '[0.5, 0.3, ..., 0.1]');
Consultas com pgvector
[editar | editar código]Buscar por similaridade (puramente vetorial) usando distância de cosseno:
SELECT * FROM documentos
ORDER BY embedding <=> '[0.2, 0.1, ..., 0.8]'
LIMIT 5;
Consulta híbrida (vetorial com filtro SQL):
SELECT * FROM documentos
WHERE id > 10
ORDER BY embedding <=> '[0.2, 0.1, ..., 0.8]'
LIMIT 5;
Índices no pgvector
[editar | editar código]O pgvector suporta diferentes tipos de índices para otimizar a busca por similaridade. O índice HNSW é recomendado para grandes conjuntos de dados.
| Índice | Complexidade de Consulta | Aplicações Típicas |
|---|---|---|
| B-tree | O(log N) | Consultas de igualdade e faixa em dados ordenados |
| Hash Index | O(1) em média | Consultas de igualdade |
| Índice | Descrição | Trade-offs |
|---|---|---|
| Força Bruta | Busca linear completa | Lento para grandes datasets, preciso |
| HNSW (Hierarchical Navigable Small World) | Grafo hierárquico para busca aproximada | Rápido, boa precisão, maior custo de construção |
| IVF (Inverted File Index) | Particiona o espaço vetorial | Mais rápido que Força Bruta e HNSW, mas menos preciso. Depende de um conjunto de dados de treinamento |
-- Exemplo de criação de índice HNSW
CREATE INDEX ON documentos USING hnsw (embedding vector_cosine_ops);
Comparação de Bancos de Dados Vetoriais
[editar | editar código]| Plataforma | Principais Características | Tipo |
|---|---|---|
| Pinecone | Indexação automática, atualizações em tempo real, escalabilidade, serverless | Gerenciado |
| Milvus | Indexação com vários algoritmos, busca eficiente, amplo suporte da comunidade | Código Aberto |
| Weaviate | Busca contextual, integração com grafos de conhecimento, busca por similaridade semântica | Código Aberto |
| Qdrant | Foco em velocidade e flexibilidade, indexação HNSW filtrável | Código Aberto |
| Elasticsearch Vector Search | Integração com o ecossistema Elasticsearch, escalabilidade, recursos de busca | Híbrido (Search/Analytics com Vetor) |
| AWS Kendra/OpenSearch | Serviços AWS com recursos de busca vetorial | Cloud / Híbrido |
| Azure AI Search | Serviço Azure com suporte a busca vetorial | Cloud / Híbrido |
| Google Cloud Vertex AI Vector Search | Busca de similaridade em grande escala, integrado ao Google Cloud AI | Cloud |
| Oracle Database Vector Database | Funcionalidade integrada ao Oracle Database para armazenar e consultar dados vetoriais | Proprietário / Híbrido |
Referências
[editar | editar código][2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
- ↑ https://www.datacamp.com/pt/tutorial/pgvector-tutorial
- ↑ https://learn.microsoft.com/pt-br/dotnet/ai/conceptual/vector-databases
- ↑ https://www.oracle.com/br/database/vector-database/
- ↑ https://www.ibm.com/br-pt/topics/vector-database
- ↑ https://www.datacamp.com/pt/blog/the-top-5-vector-databases
- ↑ https://www.ionos.com/pt-br/digitalguide/servidor/conhecimento/banco-de-dados-vetorial/
- ↑ https://blog-pt.lac.tdsynnex.com/banco-de-dados-vetorial-o-que-e-quais-sao-as-vantagens
- ↑ https://www.ibm.com/think/topics/vector-database
- ↑ https://www.oracle.com/il-en/database/vector-database/
- ↑ https://www.elastic.co/what-is/vector-database
- ↑ https://www.instaclustr.com/education/vector-database/vector-databases-explained-use-cases-algorithms-and-key-features/
- ↑ https://www.pinecone.io/learn/vector-database/
- ↑ https://qdrant.tech/articles/what-is-a-vector-database/
- ↑ https://www.datastax.com/guides/what-is-a-vector-database
- ↑ https://www.decube.io/post/vector-database-concept
- ↑ https://aws.amazon.com/what-is/vector-databases/
