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।
উৎস: Hacker News · সারাংশ: HeadlinesBriefing