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 的索引。

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案