VectorChord 0.4 Release Notes
Major Improvements
-
Streaming I/O & Page Prefetch
-
Complete rewrite of page layout to enable pipelined computation with streaming I/O.
- On PostgreSQL 17, uses
fadvise
to prefetch buffers into the OS page cache, eliminating per-buffer read waits and fully leveraging disk throughput. - In upcoming PostgreSQL 18, direct support for io_uring will further streamline asynchronous I/O.
-
Benchmarks: 2–3× lower latency on cold queries (no buffer or page cache), translating to significantly improved tail latency in production.
-
Prefilter Acceleration
-
Introduces true prefilter support for vector + filter queries.
- Previous postfilter approach ranked full result sets and then applied filters—inefficient when selectivity is low (e.g., 1% filter rate).
- Applies SQL filters before full precision vector distance computations, avoiding unnecessary work.
- Benchmarks: Up to 3× faster end-to-end search on highly selective filters without any additional tuning.
Other Improvements
-
Optimized Residual Quantization
-
Collaboration with RaBitQ author Jianyang: refactored distance term $|⟨o, q–c⟩|$ into $⟨o, q⟩ – ⟨o, c⟩$, so the query vector is quantized only once.
- Result: \~20% QPS improvement over 0.3.
-
Recommendation: Enable residual quantization for L2 workloads.
-
Fast Walsh-Hadamard Transform for Rotation
-
Collaboration with RaBitQ author Jianyang: replaced manual
vchordrq.prewarm_dim
GUC with an on-the-fly Fast Walsh-Hadamard Transform. - Removes the need to configure a prewarmed dimension list and yields marginal speed gains during setup.
Thank you for using VectorChord! As always, we welcome feedback and contributions on GitHub.
Full Changelog: https://github.com/tensorchord/VectorChord/compare/0.3.0...0.4.0