Docker -Zug für pgVecto.rs:
VectorChord (VCHORD) ist eine PostgreSQL-Erweiterung, die für skalierbare, leistungsstarke und diskutierende Vektor-Ähnlichkeitssuche entwickelt wurde, und dient als Nachfolger von PGVecto.rs.
Mit VectorChord können Sie 400.000 Vektoren für nur 1 US -Dollar speichern, um erhebliche Einsparungen zu ermöglichen: 6x mehr Vektoren im Vergleich zu optimierter PineCone und 26x mehr als PGVector/PGVecto.RS für denselben Preis 1 . Weitere Einblicke finden Sie in unserem Start -Blog -Beitrag.
VectorChord führt bemerkenswerte Verbesserungen gegenüber PGVecto.Rs und PGVector ein:
⚡ Verbesserte Leistung : Durch Bereitstellung optimierter Vorgänge mit bis zu 5x schnelleren Abfragen, einem Durchsatz von 16x höherem Einsatz und 16x schneller 2 -Index -Gebäude im Vergleich zur HNSW -Implementierung von PGVector.
? Erschwingliche Vektorsuche : Abfragen Sie 100 m 768-dimensionale Vektoren mit nur 32 GB Speicher, 35 ms P50-Latenz mit Top10-Rückruf bei 95%, wodurch Sie die Infrastrukturkosten niedrig halten und gleichzeitig eine hohe Suchqualität beibehalten.
? Nahlose Integration : Vollständig kompatibel mit PGVector -Datentypen und Syntax, während optimale Standardeinstellungen außerhalb des Box erhalten - keine manuelle Parameterabstimmung erforderlich. Lassen Sie sich nur in VectorChord für eine verbesserte Leistung fallen.
? Externer Indexbau : Nutzen Sie IVF, um Indexes extern zu erstellen (z. B. bei GPU) für eine schnellere KMEANS -Clusterbildung, kombiniert mit RabitQ 3 -Komprimierung, um die Vektoren effizient zu speichern und gleichzeitig die Suchqualität durch autonome Wiederbelebung aufrechtzuerhalten.
? Langer Vektorunterstützung : Speichern und suchen Sie Vektoren bis zu 65.535 Abmessungen und ermöglichen die Verwendung der besten hochdimensionalen Modelle wie Text-Embedding-3-Large mit Leichtigkeit.
Für neue Benutzer empfehlen wir das Docker -Image, um schnell loszulegen.
docker run
--name vectorchord-demo
-e POSTGRES_PASSWORD=mysecretpassword
-p 5432:5432
-d tensorchord/vchord-postgres:pg17-v0.1.0 Anschließend können Sie mit dem psql -Befehlszeilen -Tool eine Verbindung zur Datenbank herstellen. Der Standard -Benutzername ist postgres , und das Standardkennwort ist mysecretpassword .
psql -h localhost -p 5432 -U postgresFühren Sie die folgenden SQL aus, um sicherzustellen, dass die Erweiterung aktiviert ist.
CREATE EXTENSION IF NOT EXISTS vchord CASCADE; Und addieren Sie vchord.so zu den shared_preload_libraries in postgresql.conf .
-- Add vchord and pgvector to shared_preload_libraries --
ALTER SYSTEM SET shared_preload_libraries = ' vchord.so ' ;Um den VectorChord Rabitq (VCHORDRQ) -Endex zu erstellen, können Sie die folgende SQL verwenden.
-- 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
$$);Die Abfrageanweisung ist genau das gleiche wie PGVector. VectorChord unterstützt einen Filterbetrieb und wobei/schließen Sie Klauseln wie PGVecto.rs mit VBase zusammen.
SELECT * FROM items ORDER BY embedding < - > ' [3,1,2] ' LIMIT 5 ;Unterstützte Distanzfunktionen sind:
Sie können die Suchleistung fein stimmen, indem Sie die probes und epsilon -Parameter einstellen:
-- 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 ' ;Und für die Einstellung von 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 ' ;Um den Index vorzunehmen, können Sie die folgende SQL verwenden. Es wird die Leistung bei der Verwendung begrenzter Speicher erheblich verbessern.
-- vchordrq_prewarm(index_name::regclass) to prewarm the index into the shared buffer
SELECT vchordrq_prewarm( ' gist_train_embedding_idx ' ::regclass) "Das Indexgebäude kann parallelisiert und mit externer Schwerpunktevorberufung ist die Gesamtzeit hauptsächlich durch Festplattengeschwindigkeit begrenzt. Optimieren Sie die Parallelität mit den folgenden Einstellungen:
-- 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 ; Sie können den Indexierungsfortschritt überprüfen, indem Sie die Ansicht pg_stat_progress_create_index abfragen.
SELECT phase, round( 100 . 0 * blocks_done / nullif(blocks_total, 0 ), 1 ) AS " % " FROM pg_stat_progress_create_index;Im Gegensatz zu reinem SQL wird eine externe Indexprecomputation zunächst außerhalb von Außenbereiche durchführen und Zentroids in eine PostgreSQL -Tabelle einfügen. Obwohl es komplizierter sein mag, ist externer Build in größerem Datensatz (> 5m) definitiv viel schneller.
Um loszulegen, müssen Sie mit faiss , scikit-learn oder einer anderen Clustering-Bibliothek eine Clusterbildung von Vektoren durchführen.
Die Schwerpunkte sollten in einer Tabelle eines beliebigen Namens mit 3 Spalten voreingestellt werden:
pgvector -VektortypUnd Beispiele könnte so sein:
-- 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 '
$$);Um den Workflow zu vereinfachen, stellen wir End-to-End-Skripte für die Vorbereitung der externen Index an, siehe Skripte.
Installieren Sie PGRX gemäß den Anweisungen von 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 Diese Software ist unter einem Dual -Lizenz -Modell lizenziert:
GNU Affero General Public Lizenz V3 (AGPLV3) : Sie können diese Software unter den Bedingungen des AGPLV3 verwenden, ändern und verteilen.
Elastic -Lizenz V2 (ELV2) : Sie können diese Software auch unter der Elastic -Lizenz V2 verwenden, ändern und verteilen, die spezifische Beschränkungen aufweist.
Sie können beide Lizenz basierend auf Ihren Bedürfnissen auswählen. Wir begrüßen jegliche kommerzielle Zusammenarbeit oder Unterstützung. Bitte senden Sie uns eine E-Mail an [email protected] mit Fragen oder Anfragen zu den Lizenzen.
Basierend auf MyScale-Benchmark mit 768-dimensionalen Vektoren und 95% erinnern. ↩
Basierend auf MyScale-Benchmark mit 768-dimensionalen Vektoren. Bitte schauen Sie unseren Blog -Beitrag für weitere Details an. ↩
Gao, Jianyang und Cheng Long. "Rabitq: Quantisierung hochdimensionaler Vektoren mit einem theoretischen Fehler, der für die ungefähre Suche nach dem nächsten Nachbarn ist." Verfahren des ACM zur Verwaltung von Daten 2.3 (2024): 1-27. ↩