Asopitech VS
SQLite vec1 vs Alopex DB
SQLite公式のベクトル拡張vec1の仮想テーブル、索引モード、学習済みモデルによる近似検索を、Alopex DBと比べて紹介します。
更新: 2026/10/12
SQLite vec1とは
vec1は、SQLiteの公式サイトで配布される、SQLite公式のベクトル検索拡張です。SQLiteの仮想テーブルの仕組みで、近似最近傍検索を行います。距離は、ユークリッド(L2)とコサインです。移植性のあるCの1ファイル vec1.c で書かれ、外部の依存を持ちません。x86ではAVX2、ARMではNEONを使います。作者は、ソースコードの著作権を放棄しています。
仕組み
- 索引方式:IVFADC(非対称距離計算つきの転置ファイル)とOPQ(最適化された直積量子化)を使います。
- 索引モード:既定のnone、ベクトルを大きなBLOBに詰めて全件探索するflat、学習済みモデルを使う近似検索から選びます。
- 学習と再構築:近似検索のモデルは、集約関数
vec1_train()を代表的なベクトルの集合にかけて作ります。モデルをrebuildコマンドで仮想テーブルに渡し、索引を作り直します。 - メタデータ列:メタデータ列の値は近似検索の索引に埋め込まれ、距離を計算する前の絞り込みに使えます。
主な機能
仮想テーブルをテーブル値関数として呼び出し、近いベクトルを取り出します。メタデータを別のテーブルに持つ場合は、ストリーミングの問い合わせで絞り込みます。学習と再構築は、複数のスレッドで動かせます。
制限
- 現在のリリースは0.8で、1.0より前の版です。
- ベクトルの要素は、32ビットの浮動小数点数だけです。
- 索引方式は、IVFADCだけです。HNSWやDiskANNのようなグラフ型の索引は持ちません。
- 距離は、L2とコサインです。内積は使えません。
- 近似検索には、
vec1_train()での学習と、rebuildでの索引の再構築が要ります。近似検索の結果は、本当の最近傍とは限りません。 - すべてのベクトルは同じ次元数で、最初に入れたベクトルの長さに固定されます。
- x86-64でSIMD命令を有効にしてビルドしたバイナリは、その命令を持たないマシンでは動きません。
Alopex DBとの違い
どちらも、SQLの中でベクトル検索を使えます。
Alopex DBは、ベクトル型とHNSW索引を本体に持ちます。HNSW索引は、学習の工程なしで作れ、ベクトルは挿入のたびに索引に入ります。テーブルの行とベクトルを同じトランザクションで更新し、データは .alopex の1つのファイルにまとまります。
SQLの中でベクトルを属性の条件と組み合わせられるAlopex DBの組み込みもおすすめです。クイックスタートですぐに動きます。