LanceDBは10万個のOpenAI埋め込みのロードにおいて、pgvectorよりも22倍高速でしたが、8つの同時クライアントによる同一ワークロードに対しては、pgvectorの方が1.8倍速く応答しました。シングルスレッドのレイテンシとストレージ効率の差もLanceDBに有利に働いており、開発者がデータに基づいてベクトルストアを選択するための指標となります。

なぜ今、ベンチマークが重要なのか

ベクトル検索は、研究室からレコメンデーションエンジンや検索拡張生成(RAG)といったプロダクションサービスへと移行しました。ほとんどのチームはすでにPostgreSQLを運用しているため、pgvector拡張機能を使えば新しいインフラを構築することなく類似性検索を実現できます。しかし、LanceDBのような専用ストアは、より低いレイテンシと安価なストレージを謳っています。チームは「既存の環境に追加する」か「専用のエンジンを稼働させる」かの選択を迫られます。この決定は、データセットの増大やリクエスト数の増加に伴い、コストとパフォーマンスに大きな影響を与えます。

テストの設定方法

両システムにおいて、OpenAIの埋め込みモデルによって生成された、各1536次元の同一の10万個のベクトルをインデックス化しました。インジェクション(取り込み)速度、ディスク使用量、シングルスレッドのクエリレイテンシ、および8つの同時クライアントによるスループットを測定しました。

直接対決の結果

  • インジェクション速度 – LanceDBが22倍の優位性を記録しました。
  • ディスク使用量 – LanceDBは、pgvectorが使用したスペースの約3分の1の容量でベクトルを保存しました。
  • シングルスレッド・レイテンシ – LanceDBではクエリが約2倍速く実行されました。
  • 並行性のスケーリング – 8つの並列クライアントを使用した場合、pgvectorはLanceDBよりも1.8倍高いスループットを実現しました。

差異の根本的なアーキテクチャ

LanceDBは、アプリケーションをホストするPythonプロセス内で動作する組み込み(embedded)ライブラリです。すべての操作がプロセス内で行われるため、データがネットワーク境界を越えることはなく、最小限のオーバーヘッドでインデックスが更新されます。この設計は単一タスクのワークロードでは威力を発揮しますが、複数のPythonスレッドがGlobal Interpreter Lock (GIL) を奪い合うと限界に達します。GILはPythonバイトコードの真の並列実行をブロックするためです。

pgvectorは、サーバーサイドでPostgreSQLを拡張するものです。各クライアント接続は個別のサーバープロセスを起動するため、GILを完全に回避できます。PostgreSQLのプランナーが類似性検索をどのように実行するかを決定し、サーバーは多数のプロセスを立ち上げて並行リクエストに対応できます。この分離構造が、高負荷時における優れたスケーリングの理由です。

フィルタリングとクエリプランニングの癖

実世界のRAGパイプラインでは、ベクトル類似性と従来のフィルタ(例:WHERE user_id = 42)を組み合わせることがよくあります。LanceDBは、実行ごとに予測可能な動作をするプリフィルタを適用します。一方、pgvectorはPostgreSQLのクエリプランナーに依存しており、統計情報に基づいて高速なインデックススキャンを選択するか、低速なフルスキャン(exact scan)にフォールバックするかを決定します。pgvectorのテーブルにデータを一括ロードした後にANALYZEを実行すると、これらの統計情報が更新されます。これを行わないと、再現率(recall)がほぼゼロまで低下し、実質的に検索が機能しなくなる可能性があります。

それぞれの選択肢が適しているケース

pgvectorを選ぶべき場合

  • すでにスタックにPostgreSQLが含まれており、新しいサービスを追加したくない場合。
  • 多数の同時ユーザーやAPIコールが予想される場合。
  • ACID特性の保証や、使い慣れたDBAツールが重要な場合。

LanceDBを選ぶべき場合

  • ワークフローが、新しい埋め込みを頻繁に取り込むMLパイプラインである場合。
  • 書き込みパスの高速化と、単一リクエストのエージェント(チャットボットなど)に対する低レイテンシが必要な場合。
  • ディスクコストが懸念事項であり、シングルスレッドのパフォーマンスの限界を許容できる場合。

結論: 生のインジェクション速度、最小限のストレージ、および単一リクエストのレイテンシが最も重要であれば、LanceDBの勝利です。一方で、一度に多くのユーザーに対応する必要があり、既存のPostgreSQL環境を利用する場合は、並行処理に優れるpgvectorの方が安全な選択となります。このベンチマークの数値を活用して、製品の最も重要なメトリクスに最適なストアを選択してください。