Η αρχιτεκτονική του PRISM ευρετηρίου

Ο PRISM (Partitioned Routing Index for Similarity Matching) είναι μια προσαρμοσμένη μέθοδος πρόσβασης σε ευρετήρια της PostgreSQL που φτιάχνεται σε C. Ολοκληρώνεται ένα hiérαρχικό δέντρο κέντρων όπου κάθε κόμβος αντιπροσωπεύει ένα κέντρο σύμπλεγματος. Τα διανύσματα αναθέονται σε φύλλα (posting lists) ανάλογα με το πιο κοντινό κέντρο στο δέντρο. Το δέντρο διατηρείται στην buffer cache της PostgreSQL, ώστε η διάσχιση του να είναι εξαιρετικά γρήγορη χωρίς να χρειάζεταιdisk I/O.

RaBitQ κβαντισμός και δύο-βήμα αναζήτηση

Κάθε διανύσμα στο posting list αποθηκεύεται σε RaBitQ μορφή, μια δυαδική κβαντοποίηση με θεωρητικά όρια σφάλματος. Durante την αναζήτηση, το σύστημα πρώτιστα υπολογίζει μια γρήγορη εκτίμηση απόστασης με τη RaBitQ κωδικοποίηση, στη συνέχεια ελέγχει το όριο σφάλματος για να αποφασίσει αν το διανύσμα μπορεί να είναι γείτονας. Μόνο αν περάσει αυτό το φίλτρο προχωράμε στην πλήρη ακριβή ανακατατάξη από το heap. Αυτό μειώνει δραστικά τον αριθμό των διανυσμάτων που χρειάζεται πλήρης σύγκριση.

SIMD-βελτιστοποιημένος υπολογισμός απόστασης

Οι υπολογισμοί L2, εσωτερικού γινομένου και κοσινού είναι γραμμένοι με intrinsics SIMD (AVX2, AVX512 για x86 και NEON για ARM). Έτσι, το σύστημα μπορεί να επεξεργαστεί πολλαπλές τιμές διανύσματος παράλληλα, μειώνοντας τον χρόνο υπολογισμού απόστασης κατά 4‑8x σε σύγκριση με scalar κώδικα. Η βελτιστοποίηση είναι διαφανής για τον χρήστη – οι ίδιοι τελεστές <->, <#>, <=> χρησιμοποιούν τον βελτιστοποιημένο κώδικα πίσω από τις σκηνές.

Ενσωμάτωση με pgvector, χρήση και συντήρηση

Η επέκταση pg_vectorsearch μπορεί να coexist με το pgvector. Τα vec32 και vec16 είναι δυαδικά συμβατά με vector και halfvec, οπότε μπορούμε να δημιουργήσουμε PRISM ευρετηρίου σε υπάρχουσες στήλες χωρίς να αλλάξουμε το σχήμα. Τα ίδια operators (<->, <#>, <=>) και οι ίδιες GUCs (π.χ. prism.nprobe) εφαρμόζονται. Η συντήρηση γίνεται με τη διαδικασία prism_rebalance που χωρίζει μεγάλες posting lists στο χώρο, ενώ το REINDEX ξανα‑κτίζει το ευρετήριο από την αρχή.

Για να δούμε τον σχεδιασμό σε βάθος, βλέπετε το docs/architecture.md, ενώ για τις ρυθμίσεις και τα trade‑offs το docs/tuning.md.