datastax/jvector
JVector: the most advanced embedded vector search engine
解决的问题
JVector 旨在解决「维度灾难」问题,即在高维空间中,精确最近邻搜索(KNN)变得极其昂贵且缓慢(线性扫描)。它提供了一种近似最近邻(ANN)搜索,可在对数时间内运行,使高效搜索大规模数据集成为可能。
工作原理
JVector 是一种基于图的索引,结合了 HNSW(分层可导航小世界)和 DiskANN(Vamana 算法)的架构优势。它采用多层图结构:
- 上层: 这些层保留在内存中,以邻接表形式存储,无需磁盘 I/O 即可实现快速导航。
- 底层: 该层存储在磁盘上。为优化性能,JVector 采用两阶段搜索策略:
- 第一阶段: 使用保留在内存中的向量的有损压缩表示(如 Product Quantization (PQ)、Binary Quantization (BQ) 或 Fused PQ)来缩小候选范围。
- 第二阶段: 使用从磁盘读取的更精确的表示(如全分辨率 float32 向量或 NVQ)来精炼搜索结果。
此外,JVector 允许使用这种两阶段搜索来构建索引本身,从而能够创建超出系统可用内存大小的索引。
适用人群
需要快速、可扩展的语义搜索或向量数据库的应用开发者,特别是使用 Java 生态系统(支持 Java 11 至 Java 20+)的开发者。
主要亮点
- 混合架构: 融合 HNSW 的分层结构与 DiskANN 的 Vamana 算法。
- 内存高效: 两阶段搜索设计在保持精度的同时,降低内存使用量和延迟。
- 支持量化: 支持多种量化技术,包括 PQ、BQ 和 NVQ。
- 可扩展构建: 非阻塞并发控制使索引构建可随 CPU 核心数线性扩展。
- 超内存索引: 可构建超出可用 RAM 的索引。
相关
- 项目
- 项目
- 项目
- 项目
- 项目