سحب Docker لـ PGVECTO.RS:
VectorChord (VChord) هو امتداد postgresql مصمم للبحث عن تشابه المتجهات القابل للتطوير وعالي الأداء و activity ، ويعمل كخلف لـ pgvecto.rs.
مع VectorChord ، يمكنك تخزين 400،000 متجهات مقابل 1 دولار فقط ، مما يتيح وفورات كبيرة: 6x ناقلات أخرى مقارنة بتخزين Pinecone المحسّن و 26x أكثر من PGVector/PGVECTO.RS لنفس السعر 1 . لمزيد من الأفكار ، تحقق من منشور مدونة الإطلاق.
يقدم VectorChord تحسينات ملحوظة على pgvecto.rs و pgvector:
⚡ الأداء المحسن : تقديم عمليات محسّنة مع استفسارات ما يصل إلى 5x أسرع ، و 16 × إدراج إدراج أعلى ، ومبنى فهرس أسرع 16x مقارنة بتطبيق HNST في PGVector.
؟ البحث في المتجهات بأسعار معقولة : الاستعلام 100m 768-المتجهات الأبعاد باستخدام ذاكرة 32 جيجابايت فقط ، لتحقيق 35 مللي ثانية P50 مع Top10 recly@95 ٪ ، مما يساعدك على الحفاظ على تكاليف البنية التحتية مع الحفاظ على جودة بحث عالية.
؟ التكامل السلس : متوافق تمامًا مع أنواع بيانات PGVector وبناء الجملة مع توفير الإعدادات الافتراضية المثلى من المربع - لا يلزم ضبط المعلمة اليدوية. مجرد إسقاط في VectorChord لتعزيز الأداء.
؟ بناء الفهرس الخارجي : استفادة من التلقيح الاصطناعي لإنشاء فهارس خارجيًا (على سبيل المثال ، على GPU) لتجميع Kmeans أسرع ، جنبًا إلى جنب مع ضغط Rabitq 3 لتخزين المتجهات بكفاءة مع الحفاظ على جودة البحث من خلال إعادة التنقل المستقل.
؟ دعم المتجهات الطويل : تخزين وبحث ناقلات ما يصل إلى 65،535 أبعاد ، مما يتيح استخدام أفضل الطرز ذات الأبعاد عالية مثل text-embedding-3-large بسهولة.
للمستخدمين الجدد ، نوصي باستخدام صورة Docker للبدء بسرعة.
docker run
--name vectorchord-demo
-e POSTGRES_PASSWORD=mysecretpassword
-p 5432:5432
-d tensorchord/vchord-postgres:pg17-v0.1.0 ثم يمكنك الاتصال بقاعدة البيانات باستخدام أداة سطر الأوامر psql . اسم المستخدم الافتراضي هو postgres ، وكلمة المرور الافتراضية هي mysecretpassword .
psql -h localhost -p 5432 -U postgresقم بتشغيل SQL التالي لضمان تمكين التمديد.
CREATE EXTENSION IF NOT EXISTS vchord CASCADE; وتأكد من إضافة vchord.so إلى shared_preload_libraries في postgresql.conf .
-- Add vchord and pgvector to shared_preload_libraries --
ALTER SYSTEM SET shared_preload_libraries = ' vchord.so ' ;لإنشاء فهرس VectorChord Rabitq (VchordRQ) ، يمكنك استخدام 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
$$);بيان الاستعلام هو بالضبط نفس PGVector. يدعم VectorChord أي عملية مرشح وأين/انضم إلى الجمل مثل pgvecto.rs مع VBase.
SELECT * FROM items ORDER BY embedding < - > ' [3,1,2] ' LIMIT 5 ;وظائف المسافة المدعومة هي:
يمكنك ضبط أداء البحث عن طريق ضبط probes ومعلمات 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 ' ;ولإعداد 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 ' ;لسبق الفهرس ، يمكنك استخدام SQL التالي. سيحسن الأداء بشكل كبير عند استخدام ذاكرة محدودة.
-- vchordrq_prewarm(index_name::regclass) to prewarm the index into the shared buffer
SELECT vchordrq_prewarm( ' gist_train_embedding_idx ' ::regclass) "يمكن أن يتوازى بناء الفهرس ، ومع تكسير النقط الوسطى الخارجية ، يقتصر إجمالي الوقت بشكل أساسي على سرعة القرص. تحسين التوازي باستخدام الإعدادات التالية:
-- 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 ; يمكنك التحقق من تقدم الفهرسة عن طريق الاستعلام عن عرض pg_stat_progress_create_index .
SELECT phase, round( 100 . 0 * blocks_done / nullif(blocks_total, 0 ), 1 ) AS " % " FROM pg_stat_progress_create_index;على عكس SQL Pure ، ستقوم بتكوين فهرس خارجي أولاً بالتجميع في الخارج وإدراج الأدوات الوسطى إلى جدول PostgreSQL. على الرغم من أنه قد يكون أكثر تعقيدًا ، إلا أن البناء الخارجي هو بالتأكيد أسرع بكثير على مجموعة بيانات أكبر (> 5 أمتار).
للبدء ، تحتاج إلى إجراء مجموعة من المتجهات باستخدام faiss أو scikit-learn أو أي مكتبة تجميع أخرى.
يجب أن تكون النطاقات الوسطى مسبقًا في جدول من أي اسم مع 3 أعمدة:
pgvectorوالمثال يمكن أن يكون هكذا:
-- 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 '
$$);لتبسيط سير العمل ، نحن نقدم البرامج النصية الشاملة لمؤسسة الفهرس الخارجي المسبق ، انظر البرامج النصية.
قم بتثبيت PGRX وفقًا لتعليمات 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 هذا البرنامج مرخص بموجب نموذج ترخيص مزدوج:
Gnu Affero General Public License v3 (Agplv3) : يمكنك استخدام هذا البرنامج وتعديله وتوزيعه بموجب شروط Agplv3.
الترخيص المرن V2 (ELV2) : يمكنك أيضًا استخدام هذا البرنامج وتعديله وتوزيعه ضمن ترخيص المرن V2 ، والذي يحتوي على قيود محددة.
يمكنك اختيار أي ترخيص بناءً على احتياجاتك. نرحب بأي تعاون أو دعم تجاري ، لذا يرجى مراسلتنا عبر البريد الإلكتروني [email protected] مع أي أسئلة أو طلبات بخصوص التراخيص.
استنادًا إلى القياس الفطري مع ناقلات 768-الأبعاد وتذكر 95 ٪. ↩
استنادا إلى معيار Myscale مع 768 ناقلات الأبعاد. يرجى الخروج من منشور مدونتنا لمزيد من التفاصيل. ↩
غاو ، جيانيانغ ، وتشنغ لونج. "Rabitq: كمية ناقلات عالية الأبعاد مع خطأ نظري ملزم للبحث أقرب جار تقريبي." وقائع ACM على إدارة البيانات 2.3 (2024): 1-27. ↩