datastax/jvector
JVector: the most advanced embedded vector search engine
何を解決するか
JVectorは「次元の呪い」を解決するように設計されており、高次元空間では正確な最近傍検索(KNN)が非現実的で遅くなる(線形スキャン)問題に対処します。対象最近傍(ANN)検索を対数時間で実行するため、大規模なデータセットを効率的に検索することが可能になります。
動作方法
JVectorは、HNSW(Hierarchical Navigable Small Worlds)とDiskANN(Vamanaアルゴリズム)のアーキテクチャ的強みを組み合わせたグラフベースのインデックスです。マルチレイヤー構造を使用しています:
- 上位レイヤー: これらはメモリ内に保持された隣接リストとして保持され、ディスクI/Oなしで高速なナビゲーションが可能になります。
- 下位レイヤー: このレイヤーはディスク上に保存されます。パフォーマンスを最適化するために、JVectorは2パス検索戦略を採用しています:
- 1回目のパス: メモリ内に保持されたベクトルの損失あり圧縮表現(例:Product Quantization (PQ)、Binary Quantization (BQ)、Fused PQ)を使用して候補を絞り込みます。
- 2回目のパス: ディスクから読み込まれたより正確な表現(例:フル解像度の float32 ベクトルや NVQ)を使用して検索を精緻化します。
さらに、JVectorはこの2パス検索を使用してインデックス自体を構築でき、システムメモリを超えるサイズのインデックスを作成することが可能になります。
対象ユーザー
Javaエコシステム(Java 11~Java 20+をサポート)内で動作する、高速でスケーラブルな意味的検索やベクトルデータベースを構築する開発者。
特徴
- ハイブリッドアーキテクチャ: HNSWの階層構造とDiskANNのVamanaアルゴリズムを統合。
- メモリ効率: 2パス検索設計により、メモリ使用量とレイテンシを削減しながら精度を維持。
- 量子化サポート: PQ、BQ、NVQを含む複数の量子化技術をサポート。
- スケーラブルな構築: ブロッキングしない並行制御により、CPUコア数に比例してインデックス構築がスケーラブル。
- メモリを超えるインデックス: 利用可能なRAMを超えるインデックスの構築が可能。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト