1yefuwang1/vectorlite
Fast, SQL powered, in-process vector search for any language with an SQLite driver
Vectorlite – SQLite内部での高速ベクトル検索
機能概要
Vectorliteは、実行時にロード可能なSQLite拡張機能であり、高次元ベクトルに対する近似最近傍(ANN)探索のための新しい仮想テーブルタイプを追加します。これにより、ベクトルをSQLiteデータベースに直接保存し、通常のSQL文で高速な類似度クエリを実行できるようになります。
特徴
- SQLファーストのワークフロー – 別途ベクトルデータベースは不要です。リレーショナルデータとベクトル埋め込みを1つのファイルにまとめて保持できます。
- 高速性 – HNSWアルゴリズム(hnswlib経由)とSIMD加速距離計算を使用しており、総当たり式のSQLite拡張機能よりも3〜100倍高速なクエリを実現します。
- クロス言語 – コンパイル済みの
vectorlite.so/.dll/.dylibは、SQLite拡張機能をロードできるあらゆる言語(Python, Node.js, Rust, Goなど)で使用可能です。 - ポータビリティ – Linux x64、Windows x64、macOS Apple Silicon向けのビルド済みバイナリを提供。Pythonホイール(
vectorlite-py)およびnpmパッケージとしても利用可能です。
使用方法(SQL例)
.load path/to/vectorlite.so -- 拡張機能をロード
SELECT vectorlite_info(); -- バージョン情報
-- 3次元のfloat32ベクトルを保持するテーブルを作成
CREATE VIRTUAL TABLE my_vec USING vectorlite(
embedding float32[3], hnsw(max_elements=100)
);
INSERT INTO my_vec(rowid, embedding) VALUES (0, vector_from_json('[1,2,3]'));
INSERT INTO my_vec(rowid, embedding) VALUES (1, vector_from_json('[2,3,4]'));
INSERT INTO my_vec(rowid, embedding) VALUES (2, vector_from_json('[7,7,7]'));
-- [3,4,5] の2つの最近傍を検索
SELECT rowid, distance
FROM my_vec
WHERE knn_search(embedding, knn_param(vector_from_json('[3,4,5]'), 2));
この拡張機能は以下のヘルパー関数を提供します:
vector_from_json()/vector_to_json()– JSON配列とSQLiteが保存するバイナリ形式との間で変換を行います。vector_distance()– 正確なL2、コサイン、または内積距離を計算します。knn_param()およびknn_search()– ANNクエリを構築・実行します。vectorlite_info()– ビルド詳細と実行時に選択されたSIMDターゲットを表示します。
主な機能
| 機能 | 詳細 |
|---|---|
| ANNエンジン | HNSW (hierarchical navigable small world) をhnswlib経由で提供。ef_construction, M などを調整可能 |
| 距離メトリクス | L2 (二乗), コサイン, 内積 (IP) |
| SIMD加速 | GoogleのHighwayライブラリを使用。高次元ベクトルにおいてhnswlib独自の距離計算コードより1.5〜3倍高速 |
| データ型 | float32, float16, bfloat16 – 半精度テーブルは挿入/クエリ時に量子化されます |
| メタデータフィルタ | Row-id述語はインデックスにプッシュダウンされます (SQLite ≥ 3.38) |
| 永続化 | インデックスはメモリ上に存在。明示的な INSERT … (operation, path) VALUES ('save', '/path') および ('load', …) コマンドでシリアライズ/デシリアライズ |
| クロスプラットフォーム | Linux x64, Windows x64, macOS Apple Silicon用バイナリ。Python用ホイール、Node.js用npmパッケージ |
| ベータステータス | APIは変更される可能性があります。破壊的変更により CREATE VIRTUAL TABLE の自動インデックスファイル引数は削除されました |
想定される用途
- RAGやセマンティック検索サービスを構築する開発者で、すでにメタデータ管理にSQLiteを使用している場合。
- データサイエンスノートブックで、別のベクトルDBを立ち上げずに高速なベクトル類似度計算を行いたい場合。
- 組み込みまたはエッジアプリケーション(モバイル、IoTなど)で、小さく自己完結型のベクトルインデックスが必要な場合。
- SQLでのクエリを好み、ベクトルデータとリレーショナルデータを一元管理したい場合。
制限事項
- インデックスはメモリ内のみです。接続を閉じる前に明示的に保存する必要があります。
- ベータ版のため、将来のリリースで破壊的変更が行われる可能性があります。
- IntelベースのmacOSはサポートしていません。Apple Siliconのみです。
- 近似結果 – 再現率はHNSWパラメータに依存します(精度を高めるために調整可能です)。
上記のすべての情報は、リポジトリのREADMEから直接引用しています。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト