HeadlinesBriefing HeadlinesBriefing 12 languages

Pg_vectorsearch: An index that is faster than pgvector's IVFFlat and HNSW

Hacker News ·

🇬🇧 English

pg_vectorsearch is a PostgreSQL extension for high-performance approximate nearest neighbor (ANN) search, shared on GitHub and discussed on Hacker News. It is currently in alpha and meant for testing rather than production. Upgrading between prereleases may not be possible, so users should plan to drop and recreate the extension and its indexes. The changelog lists known issues.

The extension's PRISM index (Partitioned Routing Index for Similarity Matching) is an index access method conceptually similar to pgvector's IVFFlat, but built around RaBitQ quantization, hierarchical routing and partitioning. It is implemented in C and supports SIMD distance computation (AVX2, AVX512, NEON), dynamic inserts, updates and deletes, and rebalancing of posting lists via prism_rebalance. The project states that PRISM is significantly faster than pgvector's IVFFlat and HNSW for both querying and index building, and that on a 100-million-vector dataset it outperforms HNSW at equivalent recall on an instance with a quarter of the memory.

PRISM uses a hierarchical centroid tree to partition vectors into clusters, relying on the PostgreSQL buffer cache to keep that tree warm. Vectors are RaBitQ-quantized and stored in posting lists. Its error bounds let searches exclude vectors that cannot be nearest neighbors, reducing the number of full-precision reranks needed.

Users can store vectors in native vec32 or vec16 columns, or build a PRISM index directly on existing pgvector vector or halfvec columns without changing their tables or queries. Both paths use the same operators and tuning settings, such as prism.nprobe for trading recall against speed.

View original article →


🇸🇦 العربية

pg_vectorsearch: بحث متجهي سريع لـ PostgreSQL

pg_vectorsearch هو امتداد لـ PostgreSQL مخصص للبحث التقريبي عن أقرب الجيران (ANN) عالي الأداء، وقد شورك على GitHub وناقشه مجتمع Hacker News. وهو حاليًا في مرحلة ألفا ومخصص للاختبار لا للإنتاج. قد لا يكون الترقية بين الإصدارات الأولية ممكنة، لذا ينبغي للمستخدمين التخطيط لحذف الامتداد وفهارسه وإعادة إنشائها. يسرد سجل التغييرات المشكلات المعروفة.

فهرس PRISM الخاص بالامتداد (Partitioned Routing Index for Similarity Matching) هو طريقة وصول إلى الفهارس تشبه من حيث المفهوم IVFFlat في pgvector، لكنه مبني على تكميم RaBitQ والتوجيه الهرمي والتقسيم. وهو مُنفَّذ بلغة C ويدعم حساب المسافات باستخدام SIMD (AVX2 وAVX512 وNEON)، والإدراج والتحديث والحذف الديناميكي، وإعادة موازنة قوائم الإدخال عبر prism_rebalance. يذكر المشروع أن PRISM أسرع بشكل ملحوظ من IVFFlat وHNSW في pgvector سواء في الاستعلام أو بناء الفهرس، وأنه على مجموعة بيانات من 100 مليون متجه يتفوق على HNSW بالاسترجاع نفسه على مثيل يملك ربع الذاكرة.

يستخدم PRISM شجرة مراكز هرمية لتقسيم المتجهات إلى مجموعات، ويعتمد على ذاكرة التخزين المؤقت للمخزن المؤقت في PostgreSQL للإبقاء على هذه الشجرة جاهزة. تُكمَّم المتجهات باستخدام RaBitQ وتُخزَّن في قوائم الإدخال. وتتيح حدود الخطأ الخاصة به للبحث استبعاد المتجهات التي لا يمكن أن تكون أقرب الجيران، مما يقلل عدد عمليات إعادة الترتيب الكاملة الدقة اللازمة.

يمكن للمستخدمين تخزين المتجهات في أعمدة vec32 أو vec16 الأصلية، أو بناء فهرس PRISM مباشرة على أعمدة vector أو halfvec الموجودة في pgvector دون تغيير جداولهم أو استعلاماتهم. يستخدم المساران المعاملات نفسها وإعدادات الضبط نفسها، مثل prism.nprobe للموازنة بين الاسترجاع والسرعة.

هل pg_vectorsearch جاهز للاستخدام في الإنتاج؟

لا. المشروع في مرحلة ألفا ومخصص للاختبار فقط. قد لا يكون الترقية بين الإصدارات الأولية ممكنة، لذا ينبغي توقع الحاجة إلى حذف الامتداد وفهارسه وإعادة إنشائها.

العربية version →


🇧🇩 বাংলা

pg_vectorsearch: PostgreSQL-এর জন্য দ্রুত ভেক্টর সার্চ

pg_vectorsearch একটি PostgreSQL এক্সটেনশন, যা উচ্চ-কার্যক্ষমতার আনুমানিক নিকটতম প্রতিবেশী (ANN) অনুসন্ধানের জন্য তৈরি। এটি GitHub-এ শেয়ার করা হয়েছে এবং Hacker News-এ আলোচিত হয়েছে। এটি বর্তমানে আলফা পর্যায়ে আছে এবং উৎপাদনের বদলে পরীক্ষার জন্য উদ্দেশ্যে তৈরি। প্রি-রিলিজ সংস্করণগুলোর মধ্যে আপগ্রেড সম্ভব নাও হতে পারে, তাই ব্যবহারকারীদের এক্সটেনশন ও এর ইনডেক্স মুছে ফেলে পুনরায় তৈরি করার পরিকল্পনা রাখা উচিত। চেঞ্জলগে পরিচিত সমস্যাগুলোর তালিকা রয়েছে।

এই এক্সটেনশনের PRISM ইনডেক্স (Partitioned Routing Index for Similarity Matching) একটি ইনডেক্স অ্যাক্সেস পদ্ধতি, যা ধারণাগতভাবে pgvector-এর IVFFlat-এর মতো, তবে RaBitQ কোয়ান্টাইজেশন, স্তরক্রমিক রাউটিং ও পার্টিশনিংয়ের ওপর ভিত্তি করে তৈরি। এটি C ভাষায় বাস্তবায়িত এবং SIMD দূরত্ব গণনা (AVX2, AVX512, NEON), গতিশীল ইনসার্ট, আপডেট ও ডিলিট, এবং prism_rebalance-এর মাধ্যমে পোস্টিং লিস্ট পুনর্বিন্যাসকে সমর্থন করে। প্রকল্পটি দাবি করে যে কোয়েরি ও ইনডেক্স তৈরি, দুটোতেই PRISM, pgvector-এর IVFFlat ও HNSW-এর চেয়ে উল্লেখযোগ্যভাবে দ্রুত, এবং ১০ কোটি ভেক্টরের একটি ডেটাসেটে, এক-চতুর্থাংশ মেমোরির একটি ইনস্ট্যান্সে, সমান রিকলে এটি HNSW-কে ছাড়িয়ে যায়।

PRISM ভেক্টরগুলোকে ক্লাস্টারে ভাগ করতে একটি স্তরক্রমিক সেন্ট্রয়েড ট্রি ব্যবহার করে, এবং সেই ট্রিটি সক্রিয় রাখতে PostgreSQL-এর বাফার ক্যাশের ওপর নির্ভর করে। ভেক্টরগুলো RaBitQ দিয়ে কোয়ান্টাইজ করে পোস্টিং লিস্টে সংরক্ষিত হয়। এর ত্রুটি-সীমা অনুসন্ধানকে সেসব ভেক্টর বাদ দিতে দেয় যেগুলো নিকটতম প্রতিবেশী হতে পারে না, ফলে প্রয়োজনীয় পূর্ণ-নির্ভুলতার রির্যাঙ্কের সংখ্যা কমে।

ব্যবহারকারীরা ভেক্টর নেটিভ vec32 বা vec16 কলামে সংরক্ষণ করতে পারেন, অথবা বিদ্যমান pgvector-এর vector বা halfvec কলামের ওপর সরাসরি PRISM ইনডেক্স তৈরি করতে পারেন, নিজেদের টেবিল বা কোয়েরি না বদলিয়ে। উভয় পদ্ধতিই একই অপারেটর ও টিউনিং সেটিং ব্যবহার করে, যেমন রিকল ও গতির মধ্যে ভারসাম্যের জন্য prism.nprobe।

pg_vectorsearch কি উৎপাদনে ব্যবহারের জন্য প্রস্তুত?

না। প্রকল্পটি আলফা পর্যায়ে আছে এবং শুধু পরীক্ষার জন্য উদ্দেশ্যে তৈরি। প্রি-রিলিজ সংস্করণগুলোর মধ্যে আপগ্রেড সম্ভব নাও হতে পারে, তাই ব্যবহারকারীদের এক্সটেনশন ও এর ইনডেক্স মুছে ফেলে পুনরায় তৈরি করার জন্য প্রস্তুত থাকতে হবে।

বাংলা version →


🇩🇪 Deutsch

pg_vectorsearch: Schnelle Vektorsuche für PostgreSQL

pg_vectorsearch ist eine PostgreSQL-Erweiterung für leistungsstarke approximative Nächste-Nachbarn-Suche (ANN), die auf GitHub veröffentlicht und auf Hacker News diskutiert wurde. Sie befindet sich derzeit in der Alpha-Phase und ist für Tests, nicht für den Produktivbetrieb gedacht. Ein Upgrade zwischen Vorabversionen ist möglicherweise nicht möglich, daher sollten Nutzer einplanen, die Erweiterung und ihre Indizes zu entfernen und neu zu erstellen. Das Changelog listet bekannte Probleme auf.

Der PRISM-Index der Erweiterung (Partitioned Routing Index for Similarity Matching) ist eine Indexzugriffsmethode, die konzeptionell dem IVFFlat von pgvector ähnelt, aber auf RaBitQ-Quantisierung, hierarchischem Routing und Partitionierung basiert. Er ist in C implementiert und unterstützt SIMD-Distanzberechnungen (AVX2, AVX512, NEON), dynamisches Einfügen, Aktualisieren und Löschen sowie das Rebalancing von Posting-Listen über prism_rebalance. Das Projekt gibt an, dass PRISM sowohl bei Abfragen als auch beim Erstellen von Indizes deutlich schneller ist als IVFFlat und HNSW von pgvector und dass es bei einem Datensatz mit 100 Millionen Vektoren auf einer Instanz mit einem Viertel des Arbeitsspeichers bei gleicher Trefferquote (Recall) HNSW übertrifft.

PRISM nutzt einen hierarchischen Zentroid-Baum, um Vektoren in Cluster zu unterteilen, und setzt auf den Puffer-Cache von PostgreSQL, um diesen Baum im Speicher warm zu halten. Vektoren werden mit RaBitQ quantisiert und in Posting-Listen gespeichert. Seine Fehlergrenzen erlauben es Suchen, Vektoren auszuschließen, die keine nächsten Nachbarn sein können, wodurch die Anzahl der nötigen Neuberechnungen mit voller Genauigkeit sinkt.

Nutzer können Vektoren in nativen vec32- oder vec16-Spalten speichern oder einen PRISM-Index direkt auf bestehenden vector- oder halfvec-Spalten von pgvector erstellen, ohne ihre Tabellen oder Abfragen zu ändern. Beide Wege verwenden dieselben Operatoren und Tuning-Einstellungen, etwa prism.nprobe, um Trefferquote und Geschwindigkeit gegeneinander abzuwägen.

Ist pg_vectorsearch für den Produktivbetrieb bereit?

Nein. Das Projekt befindet sich in der Alpha-Phase und ist nur für Tests vorgesehen. Ein Upgrade zwischen Vorabversionen ist möglicherweise nicht möglich, daher sollten Nutzer damit rechnen, die Erweiterung und ihre Indizes entfernen und neu erstellen zu müssen.

Deutsch version →


🇪🇸 Español

pg_vectorsearch: búsqueda vectorial rápida para PostgreSQL

pg_vectorsearch es una extensión de PostgreSQL para la búsqueda aproximada de vecinos más cercanos (ANN) de alto rendimiento, compartida en GitHub y comentada en Hacker News. Actualmente está en fase alfa y pensada para pruebas, no para producción. Es posible que no se pueda actualizar entre versiones preliminares, por lo que los usuarios deben prever eliminar y volver a crear la extensión y sus índices. El registro de cambios enumera los problemas conocidos.

El índice PRISM de la extensión (Partitioned Routing Index for Similarity Matching) es un método de acceso a índices conceptualmente similar a IVFFlat de pgvector, pero construido en torno a la cuantización RaBitQ, el enrutamiento jerárquico y el particionado. Está implementado en C y admite cálculo de distancias con SIMD (AVX2, AVX512, NEON), inserciones, actualizaciones y eliminaciones dinámicas, y el reequilibrio de las listas de publicación mediante prism_rebalance. El proyecto afirma que PRISM es significativamente más rápido que IVFFlat y HNSW de pgvector tanto en consultas como en la construcción de índices, y que, con un conjunto de datos de 100 millones de vectores, supera a HNSW con una recuperación equivalente en una instancia con una cuarta parte de la memoria.

PRISM utiliza un árbol jerárquico de centroides para dividir los vectores en grupos, y depende de la caché de búfer de PostgreSQL para mantener ese árbol en memoria. Los vectores se cuantizan con RaBitQ y se almacenan en listas de publicación. Sus límites de error permiten que las búsquedas descarten los vectores que no pueden ser vecinos más cercanos, lo que reduce el número de reordenamientos con precisión completa necesarios.

Los usuarios pueden almacenar vectores en columnas nativas vec32 o vec16, o construir un índice PRISM directamente sobre columnas vector o halfvec de pgvector existentes sin cambiar sus tablas ni sus consultas. Ambas vías usan los mismos operadores y ajustes, como prism.nprobe, para equilibrar la recuperación frente a la velocidad.

¿Está pg_vectorsearch listo para su uso en producción?

No. El proyecto está en fase alfa y solo está pensado para pruebas. Puede que no sea posible actualizar entre versiones preliminares, así que los usuarios deben esperar tener que eliminar y volver a crear la extensión y sus índices.

Español version →


🇫🇷 Français

pg_vectorsearch : recherche vectorielle rapide pour PostgreSQL

pg_vectorsearch est une extension PostgreSQL destinée à la recherche approximative de plus proches voisins (ANN) haute performance, partagée sur GitHub et discutée sur Hacker News. Elle est actuellement en version alpha et destinée aux tests, et non à la production. La mise à niveau entre les préversions peut ne pas être possible ; les utilisateurs doivent donc prévoir de supprimer puis de recréer l'extension et ses index. Le journal des modifications répertorie les problèmes connus.

L'index PRISM de l'extension (Partitioned Routing Index for Similarity Matching) est une méthode d'accès aux index conceptuellement proche de l'IVFFlat de pgvector, mais construite autour de la quantification RaBitQ, du routage hiérarchique et du partitionnement. Il est implémenté en C et prend en charge le calcul de distances SIMD (AVX2, AVX512, NEON), les insertions, mises à jour et suppressions dynamiques, ainsi que le rééquilibrage des listes de postage via prism_rebalance. Le projet affirme que PRISM est nettement plus rapide que l'IVFFlat et le HNSW de pgvector, tant pour les requêtes que pour la construction des index, et que sur un jeu de données de 100 millions de vecteurs, il surpasse HNSW à rappel équivalent sur une instance disposant d'un quart de la mémoire.

PRISM utilise un arbre hiérarchique de centroïdes pour répartir les vecteurs en grappes, et s'appuie sur le cache de tampons de PostgreSQL pour maintenir cet arbre en mémoire. Les vecteurs sont quantifiés avec RaBitQ et stockés dans des listes de postage. Ses bornes d'erreur permettent aux recherches d'écarter les vecteurs qui ne peuvent pas être des plus proches voisins, réduisant ainsi le nombre de réordonnancements en pleine précision nécessaires.

Les utilisateurs peuvent stocker les vecteurs dans des colonnes natives vec32 ou vec16, ou construire un index PRISM directement sur des colonnes vector ou halfvec de pgvector existantes, sans modifier leurs tables ni leurs requêtes. Les deux approches utilisent les mêmes opérateurs et les mêmes paramètres de réglage, comme prism.nprobe, pour arbitrer entre rappel et vitesse.

pg_vectorsearch est-il prêt pour une utilisation en production ?

Non. Le projet est en version alpha et destiné uniquement aux tests. La mise à niveau entre les préversions peut ne pas être possible ; les utilisateurs doivent donc s'attendre à devoir supprimer puis recréer l'extension et ses index.

Français version →


🇮🇳 हिन्दी

pg_vectorsearch: PostgreSQL के लिए तेज़ वेक्टर खोज

pg_vectorsearch एक PostgreSQL एक्सटेंशन है जो उच्च-प्रदर्शन वाली अनुमानित निकटतम पड़ोसी (ANN) खोज के लिए बनाया गया है। इसे GitHub पर साझा किया गया है और Hacker News पर इसकी चर्चा हुई है। यह फिलहाल अल्फा चरण में है और उत्पादन के बजाय परीक्षण के लिए है। पूर्व-रिलीज़ संस्करणों के बीच अपग्रेड संभव न हो सकता है, इसलिए उपयोगकर्ताओं को एक्सटेंशन और उसके इंडेक्स को हटाकर फिर से बनाने की योजना रखनी चाहिए। चेंजलॉग में ज्ञात समस्याएँ सूचीबद्ध हैं।

इस एक्सटेंशन का PRISM इंडेक्स (Partitioned Routing Index for Similarity Matching) एक इंडेक्स एक्सेस मेथड है, जो अवधारणा के स्तर पर pgvector के IVFFlat से मिलता-जुलता है, लेकिन यह RaBitQ क्वांटाइज़ेशन, क्रमिक रूटिंग और विभाजन पर आधारित है। यह C में लागू है और SIMD दूरी गणना (AVX2, AVX512, NEON), गतिशील इन्सर्ट, अपडेट और डिलीट, तथा prism_rebalance के जरिए पोस्टिंग सूचियों के पुनर्संतुलन का समर्थन करता है। परियोजना का दावा है कि क्वेरी और इंडेक्स निर्माण, दोनों में PRISM, pgvector के IVFFlat और HNSW से काफी तेज़ है, और 10 करोड़ वेक्टर वाले डेटासेट पर, एक चौथाई मेमोरी वाले इंस्टेंस में, समान रिकॉल पर HNSW से बेहतर प्रदर्शन करता है।

PRISM वेक्टरों को क्लस्टरों में बाँटने के लिए एक क्रमिक सेंट्रॉइड ट्री का उपयोग करता है, और उस ट्री को गर्म रखने के लिए PostgreSQL बफर कैश पर निर्भर करता है। वेक्टर RaBitQ से क्वांटाइज़ होकर पोस्टिंग सूचियों में संग्रहीत होते हैं। इसकी त्रुटि सीमाएँ खोज को उन वेक्टरों को बाहर करने देती हैं जो निकटतम पड़ोसी नहीं हो सकते, जिससे आवश्यक पूर्ण-परिशुद्धता रीरैंक की संख्या घटती है।

उपयोगकर्ता वेक्टर को मूल vec32 या vec16 कॉलम में संग्रहीत कर सकते हैं, या मौजूदा pgvector के vector या halfvec कॉलम पर सीधे PRISM इंडेक्स बना सकते हैं, बिना अपनी तालिकाओं या क्वेरी को बदले। दोनों तरीके समान ऑपरेटर और ट्यूनिंग सेटिंग्स का उपयोग करते हैं, जैसे कि रिकॉल और गति के बीच संतुलन के लिए prism.nprobe।

क्या pg_vectorsearch उत्पादन उपयोग के लिए तैयार है?

नहीं। यह परियोजना अल्फा चरण में है और केवल परीक्षण के लिए है। पूर्व-रिलीज़ संस्करणों के बीच अपग्रेड संभव न हो सकता है, इसलिए उपयोगकर्ताओं को एक्सटेंशन और उसके इंडेक्स को हटाकर फिर से बनाना पड़ सकता है।

हिन्दी version →


🇮🇩 Bahasa Indonesia

pg_vectorsearch: Pencarian Vektor Cepat untuk PostgreSQL

pg_vectorsearch adalah ekstensi PostgreSQL untuk pencarian approximate nearest neighbor (ANN) berkinerja tinggi, yang dibagikan di GitHub dan dibahas di Hacker News. Saat ini masih dalam tahap alfa dan ditujukan untuk pengujian, bukan produksi. Peningkatan versi antar-prarilis mungkin tidak dapat dilakukan, sehingga pengguna sebaiknya merencanakan untuk menghapus dan membuat ulang ekstensi beserta indeksnya. Changelog mencantumkan masalah yang diketahui.

Indeks PRISM milik ekstensi ini (Partitioned Routing Index for Similarity Matching) adalah metode akses indeks yang secara konsep mirip dengan IVFFlat pada pgvector, tetapi dibangun berdasarkan kuantisasi RaBitQ, perutean hierarkis, dan partisi. Indeks ini diimplementasikan dalam C dan mendukung perhitungan jarak SIMD (AVX2, AVX512, NEON), penyisipan, pembaruan, dan penghapusan dinamis, serta penyeimbangan ulang posting list melalui prism_rebalance. Proyek ini menyatakan bahwa PRISM jauh lebih cepat daripada IVFFlat dan HNSW milik pgvector, baik untuk kueri maupun pembuatan indeks, dan bahwa pada dataset 100 juta vektor, PRISM mengungguli HNSW dengan recall yang setara pada instans yang memiliki seperempat memori.

PRISM menggunakan pohon centroid hierarkis untuk mempartisi vektor ke dalam klaster, dan bergantung pada buffer cache PostgreSQL agar pohon tersebut tetap berada di memori. Vektor dikuantisasi dengan RaBitQ dan disimpan dalam posting list. Batas kesalahannya memungkinkan pencarian mengecualikan vektor yang tidak mungkin menjadi tetangga terdekat, sehingga mengurangi jumlah pengurutan ulang presisi penuh yang diperlukan.

Pengguna dapat menyimpan vektor di kolom vec32 atau vec16 bawaan, atau membangun indeks PRISM langsung pada kolom vector atau halfvec pgvector yang sudah ada tanpa mengubah tabel atau kueri mereka. Kedua jalur ini menggunakan operator dan pengaturan penyetelan yang sama, seperti prism.nprobe untuk menyeimbangkan recall dan kecepatan.

Apakah pg_vectorsearch siap digunakan untuk produksi?

Belum. Proyek ini masih dalam tahap alfa dan hanya ditujukan untuk pengujian. Peningkatan versi antar-prarilis mungkin tidak dapat dilakukan, jadi pengguna sebaiknya siap menghapus dan membuat ulang ekstensi beserta indeksnya.

Bahasa Indonesia version →


🇯🇵 日本語

pg_vectorsearch:PostgreSQL向けの高速ベクトル検索

pg_vectorsearchは、高性能な近似最近傍(ANN)検索のためのPostgreSQL拡張機能です。GitHubで公開され、Hacker Newsでも話題になりました。現在はアルファ版であり、本番環境ではなくテスト用途を想定しています。プレリリース版間でのアップグレードができない場合があるため、ユーザーは拡張機能とそのインデックスを削除して再作成する計画を立てておく必要があります。既知の問題はチェンジログに記載されています。

この拡張機能のPRISM(Partitioned Routing Index for Similarity Matching)インデックスは、概念的にはpgvectorのIVFFlatに似たインデックスアクセスメソッドですが、RaBitQ量子化、階層的ルーティング、パーティショニングを基盤としています。C言語で実装されており、SIMDによる距離計算(AVX2、AVX512、NEON)、動的な挿入・更新・削除、そしてprism_rebalanceによるポスティングリストの再バランス調整をサポートします。プロジェクトによると、PRISMはクエリとインデックス構築の両方で、pgvectorのIVFFlatおよびHNSWより大幅に高速であり、1億ベクトルのデータセットでは、メモリが4分の1のインスタンス上で同等の再現率においてHNSWを上回るとされています。

PRISMは階層的なセントロイドツリーを用いてベクトルをクラスターに分割し、そのツリーをPostgreSQLのバッファキャッシュによってウォームな状態に保ちます。ベクトルはRaBitQで量子化され、ポスティングリストに格納されます。誤差上限により、最近傍になり得ないベクトルを検索から除外できるため、必要な全精度での再ランキングの回数を減らせます。

ユーザーは、ネイティブのvec32またはvec16列にベクトルを格納することも、既存のpgvectorのvectorまたはhalfvec列に直接PRISMインデックスを作成することもできます。テーブルやクエリを変更する必要はありません。どちらの方法も同じ演算子と、再現率と速度のトレードオフを調整するprism.nprobeなどのチューニング設定を使用します。

pg_vectorsearchは本番環境での利用に対応していますか?

いいえ。このプロジェクトはアルファ版であり、テスト専用です。プレリリース版間でのアップグレードができない場合があるため、ユーザーは拡張機能とそのインデックスを削除して再作成することを想定しておく必要があります。

日本語 version →


🇧🇷 Português

pg_vectorsearch: busca vetorial rápida para PostgreSQL

pg_vectorsearch é uma extensão do PostgreSQL para busca aproximada de vizinhos mais próximos (ANN) de alto desempenho, compartilhada no GitHub e discutida no Hacker News. Atualmente está em fase alfa e destinada a testes, não à produção. Pode não ser possível atualizar entre versões prévias, por isso os usuários devem planejar remover e recriar a extensão e seus índices. O changelog lista os problemas conhecidos.

O índice PRISM da extensão (Partitioned Routing Index for Similarity Matching) é um método de acesso a índices conceitualmente semelhante ao IVFFlat do pgvector, mas construído em torno da quantização RaBitQ, do roteamento hierárquico e do particionamento. Ele é implementado em C e oferece suporte ao cálculo de distâncias com SIMD (AVX2, AVX512, NEON), inserções, atualizações e exclusões dinâmicas, além do rebalanceamento de listas de postagem por meio de prism_rebalance. O projeto afirma que o PRISM é significativamente mais rápido que o IVFFlat e o HNSW do pgvector tanto na consulta quanto na construção do índice, e que, em um conjunto de dados de 100 milhões de vetores, supera o HNSW com recall equivalente em uma instância com um quarto da memória.

O PRISM usa uma árvore hierárquica de centroides para particionar os vetores em clusters e depende do cache de buffers do PostgreSQL para manter essa árvore aquecida. Os vetores são quantizados com RaBitQ e armazenados em listas de postagem. Seus limites de erro permitem que as buscas descartem vetores que não podem ser vizinhos mais próximos, reduzindo o número de reclassificações em precisão total necessárias.

Os usuários podem armazenar vetores em colunas nativas vec32 ou vec16, ou criar um índice PRISM diretamente sobre colunas vector ou halfvec já existentes do pgvector, sem alterar suas tabelas ou consultas. Ambos os caminhos usam os mesmos operadores e configurações de ajuste, como prism.nprobe, para equilibrar recall e velocidade.

O pg_vectorsearch está pronto para uso em produção?

Não. O projeto está em fase alfa e destinado apenas a testes. Pode não ser possível atualizar entre versões prévias, portanto os usuários devem esperar ter que remover e recriar a extensão e seus índices.

Português version →


🇷🇺 Русский

pg_vectorsearch: быстрый векторный поиск для PostgreSQL

pg_vectorsearch — это расширение PostgreSQL для высокопроизводительного приближённого поиска ближайших соседей (ANN). Оно опубликовано на GitHub и обсуждалось на Hacker News. В настоящее время расширение находится в альфа-версии и предназначено для тестирования, а не для промышленной эксплуатации. Обновление между предварительными выпусками может быть невозможным, поэтому пользователям следует планировать удаление и повторное создание расширения и его индексов. В журнале изменений перечислены известные проблемы.

Индекс PRISM (Partitioned Routing Index for Similarity Matching) расширения представляет собой метод доступа к индексам, концептуально похожий на IVFFlat из pgvector, но построенный на основе квантования RaBitQ, иерархической маршрутизации и секционирования. Он реализован на языке C и поддерживает вычисление расстояний с использованием SIMD (AVX2, AVX512, NEON), динамические вставки, обновления и удаления, а также перебалансировку списков постингов с помощью prism_rebalance. Проект утверждает, что PRISM значительно быстрее IVFFlat и HNSW из pgvector как при выполнении запросов, так и при построении индекса, а на наборе данных из 100 миллионов векторов превосходит HNSW при эквивалентной полноте поиска на экземпляре с четвертью памяти.

PRISM использует иерархическое дерево центроидов для разбиения векторов на кластеры и опирается на буферный кеш PostgreSQL, чтобы держать это дерево «горячим». Векторы квантуются с помощью RaBitQ и хранятся в списках постингов. Границы ошибок позволяют поиску исключать векторы, которые не могут быть ближайшими соседями, сокращая количество необходимых переранжирований с полной точностью.

Пользователи могут хранить векторы в нативных столбцах vec32 или vec16 либо создавать индекс PRISM непосредственно на существующих столбцах vector или halfvec из pgvector, не меняя свои таблицы и запросы. Оба варианта используют одни и те же операторы и параметры настройки, например prism.nprobe, позволяющий регулировать соотношение полноты и скорости.

Готово ли pg_vectorsearch к использованию в промышленной эксплуатации?

Нет. Проект находится в альфа-версии и предназначен только для тестирования. Обновление между предварительными выпусками может быть невозможным, поэтому пользователям следует ожидать необходимости удалять и заново создавать расширение и его индексы.

Русский version →


🇨🇳 简体中文

pg_vectorsearch:适用于 PostgreSQL 的快速向量搜索

pg_vectorsearch 是一款 PostgreSQL 扩展,用于高性能近似最近邻(ANN)搜索,已在 GitHub 上分享,并在 Hacker News 上引发讨论。该扩展目前处于 alpha 阶段,仅适用于测试,而非生产环境。预发布版本之间可能无法升级,因此用户应计划删除并重新创建该扩展及其索引。更新日志列出了已知问题。

该扩展的 PRISM 索引(Partitioned Routing Index for Similarity Matching,相似性匹配分区路由索引)是一种索引访问方法,在概念上与 pgvector 的 IVFFlat 相似,但其构建基于 RaBitQ 量化、分层路由和分区。它使用 C 语言实现,支持 SIMD 距离计算(AVX2、AVX512、NEON),支持动态插入、更新和删除,并可通过 prism_rebalance 对倒排列表进行重新平衡。该项目声明,PRISM 在查询和索引构建方面均显著快于 pgvector 的 IVFFlat 和 HNSW;在一个包含 1 亿个向量的数据集上,它在内存仅为四分之一的实例中,以同等召回率超过了 HNSW。

PRISM 使用分层质心树将向量划分为多个簇,并依赖 PostgreSQL 缓冲区缓存使该树保持常驻。向量经过 RaBitQ 量化后存储在倒排列表中。其误差界限可以排除不可能成为最近邻的向量,从而减少所需的全精度重排序次数。

用户可以将向量存储在原生的 vec32 或 vec16 列中,也可以直接在现有的 pgvector vector 或 halfvec 列上构建 PRISM 索引,而无需更改表或查询。两种方式使用相同的运算符和调优设置,例如用于权衡召回率与速度的 prism.nprobe。

pg_vectorsearch 是否已可用于生产环境?

否。该项目处于 alpha 阶段,仅供测试。预发布版本之间可能无法升级,因此用户应预期需要删除并重新创建该扩展及其索引。

简体中文 version →