asopi tech
asopi techIndie Developer

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の組み込みもおすすめです。クイックスタートですぐに動きます。

参考資料

関連ページ