Docker Pull para pgvecto.rs:
O VectorCord (VChord) é uma extensão do PostgreSQL projetada para pesquisa de similaridade vetorial escalável, de alto desempenho e com eficiência em disco e serve como sucessor do PGVecto.rs.
Com o VectorCord, você pode armazenar 400.000 vetores por apenas US $ 1, permitindo uma economia significativa: 6x mais vetores em comparação com o armazenamento otimizado da Pinecone e 26x a mais que PGVector/pgvecto.rs pelo mesmo preço 1 . Para mais informações, consulte nossa postagem no blog de lançamento.
O VectorCord apresenta aprimoramentos notáveis sobre o PGVecto.rs e o PGVector:
⚡ Desempenho aprimorado : entregando operações otimizadas com até 5x de consultas mais rápidas, 16x maior taxa de transferência de inserção e 16x mais rápida construção de índices 2 em comparação com a implementação do HNSW da PGVECTOR.
? Pesquisa de vetores acessíveis : consulta 100m vetores 768-dimensionais usando apenas 32 GB de memória, alcançando a latência de 35ms P50 com o TOP10 Recall@95%, ajudando a manter os custos de infraestrutura baixos, mantendo a alta qualidade da pesquisa.
? Integração perfeita : totalmente compatível com os tipos de dados do PGVector e sintaxe, fornecendo padrões ideais para fora da caixa - não é necessário ajustar de parâmetros manuais. Basta cair no VectorCord para um desempenho aprimorado.
? Construção do índice externo : Aproveite a fertilização in vitro para construir índices externamente (por exemplo, na GPU) para agrupamento mais rápido de Kmeans, combinado com a compressão Rabitq 3 para armazenar com eficiência vetores, mantendo a qualidade da pesquisa por meio de re -realização autônoma.
? Suporte ao vetor longo : Armazene e pesquise vetores de até 65.535 dimensões, permitindo o uso dos melhores modelos de alta dimensão, como o text-3-grande com facilidade.
Para novos usuários, recomendamos o uso da imagem do Docker para começar rapidamente.
docker run
--name vectorchord-demo
-e POSTGRES_PASSWORD=mysecretpassword
-p 5432:5432
-d tensorchord/vchord-postgres:pg17-v0.1.0 Em seguida, você pode se conectar ao banco de dados usando a ferramenta psql Command Line. O nome de usuário padrão é postgres e a senha padrão é mysecretpassword .
psql -h localhost -p 5432 -U postgresExecute o seguinte SQL para garantir que a extensão esteja ativada.
CREATE EXTENSION IF NOT EXISTS vchord CASCADE; E certifique -se de adicionar vchord.so ao shared_preload_libraries no postgresql.conf .
-- Add vchord and pgvector to shared_preload_libraries --
ALTER SYSTEM SET shared_preload_libraries = ' vchord.so ' ;Para criar o índice VectorCord Rabitq (VChordRQ), você pode usar o seguinte SQL.
-- Set residual_quantization to true and spherical_centroids to false for L2 distance --
CREATE INDEX ON gist_train USING vchordrq (embedding vector_l2_ops) WITH (options = $$
residual_quantization = true
[ build . internal ]
lists = [ 4096 ]
spherical_centroids = false
$$);
-- Set residual_quantization to false and spherical_centroids to true for cos/dot distance --
CREATE INDEX ON laion USING vchordrq (embedding vector_cos_ops) WITH (options = $$
residual_quantization = false
[ build . internal ]
lists = [ 4096 ]
spherical_centroids = true
$$);A declaração de consulta é exatamente a mesma que o PGVector. O VectorCord suporta qualquer operação de filtro e onde/junte cláusulas como o PGVecto.rs com o VBASE.
SELECT * FROM items ORDER BY embedding < - > ' [3,1,2] ' LIMIT 5 ;As funções de distância suportadas são:
Você pode ajustar o desempenho da pesquisa ajustando as probes e os parâmetros epsilon :
-- Set probes to control the number of lists scanned.
-- Recommended range: 3%–10% of the total `lists` value.
SET vchordrq . probes = 100 ;
-- Set epsilon to control the reranking precision.
-- Larger value means more rerank for higher recall rate.
-- Don't change it unless you only have limited memory.
-- Recommended range: 1.0–1.9. Default value is 1.9.
SET vchordrq . epsilon = 1 . 9 ;
-- vchordrq relies on a projection matrix to optimize performance.
-- Add your vector dimensions to the `prewarm_dim` list to reduce latency.
-- If this is not configured, the first query will have higher latency as the matrix is generated on demand.
-- Default value: '64,128,256,384,512,768,1024,1536'
-- Note: This setting requires a database restart to take effect.
ALTER SYSTEM SET vchordrq . prewarm_dim = ' 64,128,256,384,512,768,1024,1536 ' ;E para o cenário de Postgres
-- If using SSDs, set `effective_io_concurrency` to 200 for faster disk I/O.
SET effective_io_concurrency = 200 ;
-- Disable JIT (Just-In-Time Compilation) as it offers minimal benefit (1–2%)
-- and adds overhead for single-query workloads.
SET jit = off;
-- Allocate at least 25% of total memory to `shared_buffers`.
-- For disk-heavy workloads, you can increase this to up to 90% of total memory. You may also want to disable swap with network storage to avoid io hang.
-- Note: A restart is required for this setting to take effect.
ALTER SYSTEM SET shared_buffers = ' 8GB ' ;Para pré -despertar o índice, você pode usar o seguinte SQL. Isso melhorará significativamente o desempenho ao usar memória limitada.
-- vchordrq_prewarm(index_name::regclass) to prewarm the index into the shared buffer
SELECT vchordrq_prewarm( ' gist_train_embedding_idx ' ::regclass) "A construção do índice pode paralela e com a pré -computação externa do centróide, o tempo total é limitado principalmente pela velocidade do disco. Otimize o paralelismo usando as seguintes configurações:
-- Set this to the number of CPU cores available for parallel operations.
SET max_parallel_maintenance_workers = 8 ;
SET max_parallel_workers = 8 ;
-- Adjust the total number of worker processes.
-- Note: A restart is required for this setting to take effect.
ALTER SYSTEM SET max_worker_processes = 8 ; Você pode verificar o progresso da indexação, consultando a visualização pg_stat_progress_create_index .
SELECT phase, round( 100 . 0 * blocks_done / nullif(blocks_total, 0 ), 1 ) AS " % " FROM pg_stat_progress_create_index;Diferentemente do SQL Pure, uma pré -computação do índice externo primeiro fará o cluster do lado de fora e inserirá os centróides em uma tabela PostgreSQL. Embora possa ser mais complicado, a construção externa é definitivamente muito mais rápida no conjunto de dados maior (> 5m).
Para começar, você precisa fazer um agrupamento de vetores usando faiss , scikit-learn ou qualquer outra biblioteca de cluster.
Os centróides devem ser predefinidos em uma tabela de qualquer nome com 3 colunas:
pgvectorE o exemplo pode ser assim:
-- Create table of centroids
CREATE TABLE public .centroids (id integer NOT NULL UNIQUE, parent integer , vector vector( 768 ));
-- Insert centroids into it
INSERT INTO public . centroids (id, parent, vector) VALUES ( 1 , NULL , ' {0.1, 0.2, 0.3, ..., 0.768} ' );
INSERT INTO public . centroids (id, parent, vector) VALUES ( 2 , NULL , ' {0.4, 0.5, 0.6, ..., 0.768} ' );
INSERT INTO public . centroids (id, parent, vector) VALUES ( 3 , NULL , ' {0.7, 0.8, 0.9, ..., 0.768} ' );
-- ...
-- Create index using the centroid table
CREATE INDEX ON gist_train USING vchordrq (embedding vector_l2_ops) WITH (options = $$
[ build . external ]
table = ' public.centroids '
$$);Para simplificar o fluxo de trabalho, fornecemos scripts de ponta a ponta para pré-computação do índice externo, consulte scripts.
Instale o PGRX de acordo com as instruções do PGRX.
cargo install --locked cargo-pgrx
cargo pgrx init --pg17 $( which pg_config ) # To init with system postgres, with pg_config in PATH
cargo pgrx install --release --sudo # To install the extension into the system postgres with sudo Este software está licenciado sob um modelo de licença dupla:
GNU Affero Geral Public License V3 (AGPLV3) : Você pode usar, modificar e distribuir este software nos termos do AGPLV3.
Elastic License V2 (ELV2) : Você também pode usar, modificar e distribuir este software sob a Licença Elastic V2, que possui restrições específicas.
Você pode escolher qualquer licença com base em suas necessidades. Congratulamo-nos com qualquer colaboração ou suporte comercial, por isso, envie um email para o [email protected] com quaisquer perguntas ou solicitações sobre as licenças.
Com base no referência do MyScale com vetores 768-dimensionais e recall de 95%. ↩
Baseado na referência do MyScale com vetores 768-dimensionais. Confira nossa postagem no blog para mais detalhes. ↩
Gao, Jianyang e Cheng Long. "Rabitq: quantizando vetores de alta dimensão com um erro teórico com destino a uma busca aproximada mais próxima do vizinho". Anais do ACM sobre o gerenciamento de dados 2.3 (2024): 1-27. ↩