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 中。

入门指南 (快速步骤)

  1. Clone 并包含子模块 – 仓库会拉取 Google 的 Highway SIMD 库。
  2. 构建原生库 – 运行 build_native_lib.sh (仅限 Linux) 以获取 libjvector.so。
  3. 编译 Java 模块 – mvn clean install (或 mvn -Pjdk11 用于 Java 11)。
  4. 运行教程 – 按照 docs/tutorials/1-intro-tutorial.md 或查看 VectorIntro.java。
  5. 基准测试 – mvn compile exec:exec@bench 以查看在标准数据集上的性能。

它在 AI 生态系统中的定位

JVector 不是模型训练框架;它是一个搜索引擎组件,位于已经拥有向量嵌入(来自 LLM、CLIP、sentence‑transformers 等)的应用程序后端。通过提供高性能、磁盘支持的 ANN 索引,它让这些应用程序无需庞大的 RAM 即可快速检索最近邻,使大规模语义 AI 系统更具实用性。


以上所有信息均直接取自该仓库的 README。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目