J jascha_eng در github.com

معرفی pg_vectorsearch؛ ایندکس برداری جدید Timescale برای‌پستگرس‌کوئری با عملکردی سریع‌تر از HNSW و IVFFlat

۴ دقیقه مطالعه ۱۱۸ امتیاز ۳۵ نظر ۲۲ مهر ۱۴۰۵

معرفی pg_vectorsearch؛ ایندکس برداری جدید Timescale برای‌پستگرس‌کوئری با عملکردی سریع‌تر از HNSW و IVFFlat — Pg_vectorsearch: An index that is faster than pgvector's IVFFlat and HNSW

خلاصه

افزونه جدید pg_vectorsearch که توسط تیم Timescale توسعه یافته، یک ایندکس برداری پیشرفته به نام PRISM را برای PostgreSQL معرفی می‌کند. این ابزار با استفاده از کوانتیزاسیون و تکنیک‌های خوشه‌بندی، جستجوی برداری سریع‌تر و کم‌مصرف‌تری نسبت به ابزارهای سنتی مانند pgvector ارائه می‌دهد.

توسعه‌دهندگانی که با پایگاه‌های داده‌ مقیاس‌پذیر و هوش مصنوعی در PostgreSQL کار می‌کنند، همیشه با چالش مصرف بالای حافظه RAM توسط ایندکس‌های برداری مانند HNSW دست‌وپنجه نرم کرده‌اند. حالا تیم Timescale با انتشار پروژه متن‌باز pg_vectorsearch رویکرد تازه‌ای را ارائه داده است که می‌تواند معادلات جستجوی برداری (ANN) در پستگرس را تغییر دهد.

ایندکس PRISM چیست و چه مشکلی را حل می‌کند؟

این پروژه بر پایه ساختار جدیدی به نام PRISM (مخفف Partitioned Routing Index for Similarity Matching) توسعه یافته است. ساختار PRISM از نظر مفهومی مشابه ایندکس‌های IVF سنتی است، اما از تکنیک‌های مدرن خوشه‌بندی سلسله‌مربی و مسیریابی بهره می‌برد. هدف اصلی این پروژه، ارائه جستجوی برداری با کارایی بسیار بالا روی数据集‌های بزرگ (بیش از ۱۰۰ میلیون بردار) است؛ آن هم در شرایطی که حافظه RAM بسیار کمتری نسبت به ایندکس‌های مبتنی بر گراف مثل HNSW مصرف می‌کند.

بر اساس بنچمارک‌های ارائه‌شده، ساختار PRISM هم در زمان ساخت ایندکس و هم در زمان کوئری‌زدن سرعت بالاتری دارد و می‌تواند با کسری از حافظه، دقت (Recall) رقابتی ارائه دهد.

معماری و نحوه کارکرد فنی

زبان برنامه‌نویسی اصلی این افزونه C است تا بالاترین کارایی و یکپارچگی را با هسته PostgreSQL داشته باشد. معماری این ابزار بر پایه چند مؤلفه کلیدی بنا شده است:

  • درخت مسیریابی سلسله‌مربی (Hierarchical Centroid Tree): برای دسته‌بندی و خوشه‌بندی بردارها که در کَش بافر پستگرس نگه داشته می‌شود تا دسترسی به آن سریع باشد.
  • کوانتیزاسیون RaBitQ: بردارها با استفاده از این الگوریتم فشرده و در لیست‌های انتشار (Posting Lists) ذخیره می‌شوند. این الگوریتم دارای باندهای خطای تئوریک است که به موتور جستجو اجازه می‌دهد بردارهای نامربوط را به سرعت کنار بگذارد.
  • بهینه‌سازی SIMD: محاسبات فاصله به کمک دستورالعمل‌های سخت‌افزاری مانند AVX2، AVX512 و NEON به شدت بهینه شده‌اند.
  • به‌روزرسانی‌های پویا: برخلاف بسیاری از ایندکس‌های دیگر، از درج، ویرایش و حذف پشتیبانی می‌کند و با استفاده از دستور prism_rebalance می‌توان لیست‌های بیش‌ازحد بزرگ را مجدداً متوازن کرد.

نحوه استفاده و سازگاری با pgvector

نکته جالب این است که pg_vectorsearch با اکوسیستم موجود pgvector سازگار است. شما می‌توانید این افزونه را در کنار pgvector نصب کنید و روی ستون‌های موجود vector یا halfvec خود بدون نیاز به بازنویسی جدول، ایندکس PRISM بسازید.

نمونه‌ای از نحوه ساخت ایندکس و کوئری‌زدن:

CREATE EXTENSION pg_vectorsearch;

CREATE TABLE items (
    id serial PRIMARY KEY,
    embedding vec32(3) STORAGE PLAIN
);

CREATE INDEX ON items USING prism (embedding vec32_l2_ops);

SET prism.nprobe = 40;

SELECT * FROM items
ORDER BY embedding <-> '[3,1,2]'
LIMIT 5;

سیگنال‌های بلوغ و وضعیت پروژه

این مخزن تحت لایسنس متن‌باز PostgreSQL منتشر شده است. با این حال، باید توجه داشت که پروژه در فاز alpha قرار دارد و سازندگان صراحتاً اعلام کرده‌اند که هنوز برای محیط‌های سنگین پروداکشن (Production) مناسب نیست و ممکن است تغییرات نسخه‌ها نیاز به بازسازی ایندکس‌ها داشته باشد. نیازمندی‌های سیستمی آن شامل PostgreSQL 18 به بالا و کامپایلر C11 است.

نگاه جامعه مهندسی در Hacker News

این پروژه پس از انتشار در هکر نیوز مورد توجه مهندسان قرار گرفت و بحث‌های داغی پیرامون آن شکل گرفت:

  • محدودیت ابعاد: کاربران اشاره کردند که ایندکس PRISM فعلاً برای بردارهایی با ابعاد حداکثر ۱۹۶۸ بعد طراحی شده است و اگر بردارهای بزرگ‌تری دارید، فعلاً به بن‌بست می‌خورید.
  • مهاجرت به نسخه‌های جدید: از آنجا که این افزونه به نسخه ۱۸ یا بالاتر پستگرس نیاز دارد، مهاجرت برای بسیاری از سیستم‌های قدیمی سازمانی هزینه‌بر خواهد بود.
  • رقابت در بازار ابزارهای کم‌حافظه: برخی کاربران از ظهور ابزارهای جدید و رقابتی در حوزه کاهش هزینه‌های سخت‌افزاری و بهره‌گیری از درایوهای سریع NVMe استقبال کردند.

در یک نگاه

  • زبان اصلی: C
  • حوزه فعالیت: ایندکس برداری با کارایی بالا برای PostgreSQL
  • نوع ایندکس: PRISM (مبتنی بر IVF و کوانتیزاسیون RaBitQ)
  • حداقل نسخه پستگرس: نسخه ۱۸ به بالا
  • وضعیت: آلفا (مناسب برای تست و توسعه)

این مطلب به‌صورت کاملاً خودکار و با هوش مصنوعی از مقالهٔ اصلی و بحث هکرنیوز تهیه شده و ممکن است خطا داشته باشد. حقوق مطلب اصلی متعلق به نویسندهٔ آن است. قوانین و گزارش مشکل

خبرهای فناوری در قالب پست و ویدیوی کوتاه، در اینستاگرام هکرنیوز بلاگ. به‌زودی
هر خبر به محض انتشار، به‌همراه پادکست روزانه در کانال تلگرام هکرنیوز بلاگ.