pg_vectorsearch: Chỉ mục tìm kiếm vector nhanh hơn cả IVFFlat và HNSW của pgvector
Timescale vừa giới thiệu pg_vectorsearch, một tiện ích mở rộng PostgreSQL với chỉ mục PRISM cho tìm kiếm láng giềng gần đúng (ANN). PRISM được cho là nhanh hơn đáng kể so với IVFFlat và HNSW của pgvector, cả khi truy vấn lẫn khi xây dựng chỉ mục, và có thể dùng trực tiếp trên các cột vector sẵn có.

pg_vectorsearch: Chỉ mục tìm kiếm vector nhanh hơn cả IVFFlat và HNSW của pgvector
Timescale vừa công bố pg_vectorsearch, một tiện ích mở rộng PostgreSQL chuyên cho tìm kiếm láng giềng gần đúng (ANN) hiệu năng cao. Điểm nhấn của dự án là chỉ mục PRISM — được quảng cáo là nhanh hơn đáng kể so với cả IVFFlat lẫn HNSW của pgvector, cả khi truy vấn lẫn khi xây dựng chỉ mục trên tập dữ liệu hàng trăm triệu vector.
Trạng thái build của pg_vectorsearch
PRISM là gì và vì sao nó nhanh hơn?
PRISM (Partitioned Routing Index for Similarity Matching) là một phương thức truy cập chỉ mục gốc PostgreSQL, về mặt khái niệm tương tự IVFFlat nhưng được xây dựng quanh các kỹ thuật lượng tử hóa, định tuyến và phân vùng hiện đại. Toàn bộ được viết bằng C để đạt hiệu năng cao và tích hợp liền mạch với PostgreSQL.
Theo nhóm phát triển, trên tập dữ liệu 100 triệu vector, PRISM đạt tốc độ nhanh hơn HNSW ở cùng mức recall, thậm chí chỉ cần một phần tư dung lượng bộ nhớ. Cơ chế đạt được điều này gồm:
- Cây centroid phân cấp để phân vùng vector thành các cụm, dựa vào buffer cache của PostgreSQL để giữ cây luôn "nóng" trong bộ nhớ.
- Lượng tử hóa RaBitQ với biên sai số lý thuyết, cho phép tìm kiếm loại bỏ sớm những vector chắc chắn không thể là láng giềng gần nhất, nhờ đó giảm mạnh số vector cần xếp hạng lại.
- Danh sách posting với bố cục trang tối ưu cho tính toán khoảng cách bằng SIMD (AVX2, AVX512, NEON).
- Cập nhật động — hỗ trợ chèn, sửa, xóa, có thể tách danh sách posting thông qua thủ tục
prism_rebalance.
Chỉ số độ phủ kiểm thử của dự án
Luồng truy vấn của PRISM
Quá trình tìm kiếm diễn ra theo năm bước:
- Duyệt cây centroid để tìm các cụm gần nhất (từ buffer cache).
- Quét danh sách posting để lấy ứng viên (buffer cache, I/O bất đồng bộ).
- Lọc hai giai đoạn bằng RaBitQ: ước lượng → biên sai số → xếp hạng lại.
- Xếp hạng lại bằng vector độ chính xác đầy đủ từ heap.
- Trả về k láng giềng gần nhất.
Tương thích ngược với pgvector
Một điểm đáng chú ý là pg_vectorsearch tương thích với pgvector. Bạn có thể xây chỉ mục PRISM trực tiếp trên các cột vector hoặc halfvec đã có sẵn mà không cần viết lại hay sao chép dữ liệu. Hai tiện ích mở rộng có thể cài đặt song song, thậm chí trong cùng một schema, nhờ các tên kiểu dữ liệu khác nhau (vec32 / vec16 so với vector / halfvec).
Kiểu
vec32vàvec16tương thích nhị phân vớivectorvàhalfveccủa pgvector, nhưng mang tên khác — nhờ đó hai tiện ích mở rộng có thể cùng tồn tại.
Điều này cho phép các đội ngũ đã dùng pgvector chuyển dần sang PRISM: tạo chỉ mục mới, kiểm tra bằng EXPLAIN xem planner có chọn PRISM hay không, rồi mới xóa chỉ mục HNSW cũ.
Các lớp toán tử và tinh chỉnh
PRISM hỗ trợ ba thước đo khoảng cách phổ biến, với lớp toán tử tương ứng cho từng kiểu cột:
- L2 (mặc định):
vec32_l2_ops,vec16_l2_ops - Tích vô hướng:
vec32_ip_ops,vec16_ip_ops - Cosine:
vec32_cosine_ops,vec16_cosine_ops
Hầu hết triển khai chỉ cần điều chỉnh prism.nprobe — giá trị 0 nghĩa là tự động (khoảng 0,95 recall). Tăng lên để cải thiện recall, giảm xuống để tăng tốc độ.
Huy hiệu quét chất lượng trên Coverity
Yêu cầu kỹ thuật và lưu ý quan trọng
Để xây dựng pg_vectorsearch, bạn cần PostgreSQL 18+ (kèm header phát triển), trình biên dịch GNU C11 (GCC 11+ hoặc Clang 14+), hệ thống build Meson, và tùy chọn CBLAS để mã hóa RaBitQ nhanh hơn.
Cần lưu ý rằng dự án hiện ở trạng thái alpha, chỉ dành cho mục đích thử nghiệm, chưa sẵn sàng cho môi trường production. Việc nâng cấp giữa các bản pre-release có thể không thực hiện được, nên kế hoạch là xóa và tạo lại tiện ích mở rộng cùng các chỉ mục khi nâng cấp.
Về mặt kỹ thuật, PRISM dựa trên các nghiên cứu đã công bố như RaBitQ (SIGMOD 2024), SPFresh (SOSP 2023), SPANN (NeurIPS 2021) và cách tiếp cận phân cụm phân cấp của Google cho AlloyDB. Dự án được phát hành theo Giấy phép PostgreSQL và là một phần trong nỗ lực của Timescale nhằm mở rộng hệ sinh thái tìm kiếm vector trên PostgreSQL, bên cạnh pgvector và pgvectorscale.
Đối với các đội ngũ tại Việt Nam đang triển khai ứng dụng RAG, tìm kiếm ngữ nghĩa hay gợi ý sản phẩm trên PostgreSQL, đây là một lựa chọn đáng theo dõi — đặc biệt khi bài toán scale lên hàng chục đến hàng trăm triệu vector bắt đầu trở thành rào cản chi phí hạ tầng.
Bài viết liên quan

Công nghệ
Mô hình AI hàng đầu giỏi Vật lý đến đâu? Nghiên cứu mới chỉ ra các bài kiểm tra hiện hành đang đánh giá sai
16 tháng 9, 2026

Công nghệ
Nộp đơn xin việc lẽ ra nên khó hơn. Thật đấy
25 tháng 8, 2026

Công nghệ
Alexa Tablet 12 Pro: Màn hình tuyệt đẹp nhưng ngập tràn hệ sinh thái Amazon
14 tháng 10, 2026