datastax/jvector
JVector: the most advanced embedded vector search engine
JVector 是什么
JVector 是一个开源的 Java 库,实现了基于图的近似最近邻 (ANN) 索引。它结合了两种知名 ANN 算法(HNSW 和 DiskANN 的 Vamana)的思想,提供了一种快速且可扩展的搜索结构,可以部分驻留在内存中,部分驻留在磁盘上。
为何它很重要
在庞大的高维数据集中寻找 k 个最相似的向量,是许多 AI 系统(语义搜索、推荐、聚类等)的核心运算。精确搜索在规模化时太慢,因此大多数生产系统使用 ANN。JVector 的混合图设计让您可以:
- 以对数时间进行搜索,同时保持较小的内存占用。
- 构建大于 RAM 的索引,通过两阶段方法:先在内存中进行快速压缩的第一阶段,随后进行从磁盘读取数据的精确第二阶段。
- 随 CPU 核心数线性扩展构建性能,这归功于非阻塞并发机制,对于需要索引数十亿个向量时非常有价值。
核心功能 (如 README 所述)
| 功能 | 作用 |
|---|---|
| 多层图 | 上层是纯内存邻接表,用于超快速导航;底层位于磁盘上。 |
| 两阶段搜索 | 第一阶段使用压缩表示(Product Quantization, Binary Quantization 或 fused PQ)以提升速度并降低内存需求;第二阶段使用全精度 float32 或 NVQ 向量来精炼结果。 |
| 增量构建 | 索引可以增量更新和构建,不同于许多需要静态数据集的基于分区的 ANN 方法。 |
| 非阻塞并发 | 构建性能随核心数线性扩展,如 README 中的扩展图表所示。 |
| 跨平台原生 SIMD | 使用 Meson/Ninja 构建的原生库 (libjvector.so) 在 Linux x86‑64 和 AArch64 上提供 SIMD 加速的距离计算。 |
| 多版本 JAR | 将 Java‑11 兼容代码和 Java‑20 专用优化打包成单个成品,适用于任何 Java 11+ 项目。 |
| 基准测试与示例 | 可直接运行的 Bench 和 SiftSmall 类,以及 jvector-examples 中的教程代码。 |
谁适合使用它
- 构建语义搜索或推荐服务的工程师,需要对数十亿个嵌入向量实现亚毫秒级延迟。
- 原型设计新 ANN 算法的研究人员,希望有一个以 Java 编写、稳固且达到生产等级的基准。
- 将嵌入向量存储在磁盘上的公司(例如大规模文档或图像向量),且无法将整个索引放入 RAM 中。
入门指南 (快速步骤)
- Clone 并包含子模块 – 仓库会拉取 Google 的 Highway SIMD 库。
- 构建原生库 – 运行
build_native_lib.sh(仅限 Linux) 以获取libjvector.so。 - 编译 Java 模块 –
mvn clean install(或mvn -Pjdk11用于 Java 11)。 - 运行教程 – 按照
docs/tutorials/1-intro-tutorial.md或查看VectorIntro.java。 - 基准测试 –
mvn compile exec:exec@bench以查看在标准数据集上的性能。
它在 AI 生态系统中的定位
JVector 不是模型训练框架;它是一个搜索引擎组件,位于已经拥有向量嵌入(来自 LLM、CLIP、sentence‑transformers 等)的应用程序后端。通过提供高性能、磁盘支持的 ANN 索引,它让这些应用程序无需庞大的 RAM 即可快速检索最近邻,使大规模语义 AI 系统更具实用性。
以上所有信息均直接取自该仓库的 README。
相关
- 项目
- 项目
- 项目
- 项目
- 项目