業務データ、リアルタイム分析、AIワークロード——これまでバラバラだったものをひとつのデータベースに。OceanBase AI Database 詳細はこちら ->
業務データ、リアルタイム分析、AIワークロード——これまでバラバラだったものをひとつのデータベースに。OceanBase AI Database 詳細はこちら -> ->
ベクトル検索を本番環境で使うには、検索速度に加え、データが増えたときの拡張性や運用コストも考える必要があります。数百万件では快適に動いていたシステムでも、数億件になると、応答の遅延やメモリ不足への対応が課題になります。
OceanBaseは、日々の業務を支えるトランザクション処理と、意味や類似度に基づくベクトル検索を一つのデータベースで扱えます。データを複数のサーバーに分散する仕組みと、独自開発のベクトル検索ライブラリ「VSAG」を組み合わせ、データの増加に対応しながら、検索性能とコストの両立を図ります。
その基盤となるのは、業務処理や分析処理の性能を測るTPCベンチマークで世界記録を達成した分散データベースエンジンです。ベクトル検索でも、約10億件規模のデータを扱う本番環境で運用されています。本記事では、こうした性能を支える仕組みと、構成を選ぶ際のポイントを紹介します。
業務用データベースとは別にベクトルデータベースを導入すると、管理するシステムも増えます。業務用データベースのSQLやメモリ設定に加え、ベクトル検索のインデックスやメモリ使用量も、それぞれの製品に合わせて調整する必要があります。
さらに、単一ノードで扱える容量を超えた場合、構成によってはアプリケーション側でデータの分割先を管理し、複数のノードへ検索を振り分けなければなりません。検索結果を返す際にも、各ノードが見つけた候補をまとめ、全体で類似度の高い順に並べ直す処理が必要です。
OceanBaseでは、ベクトルデータとインデックスも、通常のテーブルと同じ仕組みで分散管理します。ベクトル検索とトランザクション処理は実行エンジンを共有し、SQLオプティマイザが処理を最適化します。PoCから本番運用へ移行し、データ規模が拡大しても、同じ基盤のまま運用を継続できます。データ規模や必要な検索精度に合わせてインデックスを選ぶことで、メモリ使用量の増加も抑えられます。
OceanBaseと多くの専用ベクトルデータベースの違いは、まずアーキテクチャにあります。
ベクトルデータベースによっては、アプリケーション側で検索リクエストを各シャードに振り分けて、分散処理を行います。この方式では、運用開始後のシャーディング方針の変更が難しく、シャードをまたぐ検索結果の集約や、各インスタンスの個別管理も必要です。
OceanBaseは、分散処理を前提に設計されたデータベースです。ベクトルデータとインデックスは、パーティションごとにクラスタ内のノードに自動配置されます。検索時には各パーティションでANN(近似最近傍)検索を並列実行し、それぞれのTop-K候補を集約して全体の順位を決定します。これらの処理はOceanBaseが行うため、アプリケーション側で制御する必要はありません。
ノードやパーティションを追加することで、システム全体の検索スループットを向上させられます。アプリケーションのコード変更やサービス停止は不要です。ただし、実際のQPSはパーティション数、パーティションプルーニングの有効性、フィルタ条件による絞り込みの度合いなどに左右されます。検索対象が多くのパーティションにまたがる場合は、結果の集約に追加のコストがかかります。そのため、想定する検索条件で応答時間とQPSが要件を満たすかを、パーティションキーの設計とあわせて確認する必要があります。
密ベクトルのインデックスは、主にHNSWとIVFから選べます。HNSWはメモリ上で高速に検索し、低レイテンシと高い処理性能を重視する用途に適しています。IVFはディスクを活用し、すべてのベクトルをメモリに保持せずに、より大規模なデータを扱えます。
データ量の目安 | 想定する用途 | 推奨構成 |
|---|---|---|
| 数千万件規模 | 中堅・大企業での利用。数十万~数千万件 | HNSW / HNSW_SQ / HNSW_BQ。必要な再現率とメモリ容量に応じて選択 |
| 数億件規模 | 大規模な企業システム。数千万~数億件 | パーティションテーブル + IVF_PQ、またはパーティションテーブル + HNSW_BQ |
| 数十億~数百億件規模 | 大規模なインターネットサービスや、一般消費者向けの推薦・検索 | パーティションテーブル + IVF_PQによる分散並列検索 |
構成を検討する際は、公式ドキュメントのベクトルインデックスのベストプラクティスを参照してください。必要なメモリ容量の見積もりには、INDEX_VECTOR_MEMORY_ADVISOR関数を利用できます。インデックスやパーティション構成については、OceanBaseのテクニカルサポートにもご相談いただけます。
データの分散によって大規模な検索を支えるのがOceanBaseのアーキテクチャなら、各ノードでの検索を高速化するのがVSAGです。
VSAGは、オープンソースのベクトル検索ライブラリです。HNSWとIVFに対応し、用途に応じてFlat、SQ8、PQ、BQなどと組み合わせて利用できます。高い再現率を重視する場合はHNSW、大規模データでメモリ使用量を抑える場合はIVF_PQが選択肢になります。
検索に使う距離・類似度の指標には、マンハッタン距離(L1)、ユークリッド距離(L2)、内積、コサイン類似度を利用できます。また、密ベクトルと疎ベクトルの両方に対応しています。
ベクトル検索の性能を比較する際は、検索速度と再現率をあわせて見る必要があります。
VSAGは、ベクトル検索のベンチマーク「ANN-Benchmarks」のgist-960データセットで、再現率96.7%を維持しながら、当時トップの性能を示していたGlassを90%上回るQPSを記録しました。この条件では、当時の最先端水準にある検索性能を示しました。つまり、同じハードウェアで検索精度を保ちながら、より多くのリクエストを処理できます。同じQPSを目標にする場合には、計算リソースをおよそ半分に抑えられる可能性もあります。
この結果は、特定の公開データセットで測定したものです。本番環境の性能は、ベクトルの次元数やデータ分布、インデックスの設定によって変わるため、実際のデータと検索条件で確認する必要があります。
VSAGでは、ARM対応に加え、IVFインデックスやBQ量子化の単一ノードでの性能改善も進めています。x86とARMのいずれの環境でも高い性能を発揮できるよう、最適化を進めています。
VSAGは、OceanBaseの内部でSQLエンジンと同じメモリプールとスレッドプールを使います。ベクトル検索のために別のプロセスを呼び出す必要がなく、メモリやCPUの割り当てもデータベース内で一括管理できます。これにより、プロセス間の通信や、別々の仕組みでリソースを確保することによる競合を抑えられます。
オプティマイザは、ベクトル検索、通常の列の値による絞り込み、テーブルの結合(JOIN)を一連の処理として扱います。それぞれにかかる処理コストを見積もり、どの順序で実行するかを決めます。たとえば、条件で候補を減らしてからベクトル検索を行う方が効率的なら、その順序を選べます。
このように、SQLとベクトル検索を同じエンジンで実行することで、クエリ全体を最適化できます。業務用データベースと外部のベクトルデータベースを組み合わせる場合は、両者の処理順序やデータの受け渡しをアプリケーション側で調整する必要があります。
実際のサービスでは、単に「似ているもの」を探すだけでは足りません。たとえば商品検索なら、「指定した店舗で扱う、特定のカテゴリの商品」の中から、ユーザーの入力内容に意味が近いものを探したい場合があります。このような検索では、通常の列の値による絞り込みと、ベクトルによる類似度の検索を組み合わせます。
OceanBaseのオプティマイザは、処理コストを見積もったうえで、次の二つの方式を使い分けます。
条件によって対象を大幅に減らせる場合は、先に絞り込むことで不要なベクトル計算を省けます。あまり減らせない場合は、ベクトル検索を先に行う方法も含めて、再現率とレイテンシを考慮した実行方法を選びます。VECTOR_INDEXヒントを使い、明示的に指定することもできます。
全文検索とベクトル検索の結果を組み合わせるハイブリッド検索には、HYBRID_SEARCH SQLインターフェースを利用できます。単一のクエリで複数の検索結果を統合でき、密ベクトルと疎ベクトルのいずれも利用できます。
データが増えたときのコストを左右するのが、ベクトル1件あたりに必要なメモリとストレージです。量子化は、ベクトルをより少ないビット数で表現して、データサイズを小さくする技術です。必要な検索精度とのバランスを取りながら、使用するリソースを抑えます。
ef_searchやrefine_kなどのパラメータに依存します。配送サービスのLalamove(ララムーブ)は、本番環境でHNSWの量子化による圧縮を採用しています。単一のパーティションで業務要件を満たし、アプリケーション側でデータベースやテーブルを分割する必要はありませんでした。データ量の増加に備え、今後は量子化を利用したIVF系インデックスに移行し、メモリ使用量をさらに抑える計画です。同社の事例では、インデックスの再構築にかかる時間は約25分とされています。
ベクトル検索を支えるOceanBaseの分散データベースエンジンは、業務処理と分析処理の両方で実績を持っています。その一つが、データベースの性能を測るTPCベンチマークです。
これらはベクトル検索自体の測定結果ではありませんが、検索を支えるエンジンが、トランザクション処理と大規模な分析処理の双方に対応できることを示しています。
可用性については、3つの地域に5つのデータセンターを配置する構成で、RPO = 0、RTO < 8秒を実現します。RPOはデータをどの時点まで復旧させるか、RTOはどれだけの時間で復旧させるかを示す目標です。この構成では、データ損失をゼロに抑え、8秒未満での復旧を実現します。ベクトルデータと業務データの両方を、同じ仕組みで保護できます。
2025年8月時点では、OceanBaseはDB-Enginesのベクトルデータベースランキングで8位に入り、Multi-modelに分類されています。これは当時の順位です。製品を選ぶ際は、最新の公開ベンチマークやPoCの結果もあわせて確認してください。
旅行予約サービスを展開するTrip.comグループでは、Ctripがホテル画像のベクトル約10億件をOceanBaseに移行しました。従来のElasticsearchとFaissを組み合わせた構成を置き換え、事例の報告時点で、稼働開始から約1年間、障害なく運用しています。
IVFインデックスとコサイン距離を採用し、384次元のベクトルをlocationフィールドで3,000のパーティションに分割しています。条件による絞り込みを組み合わせた検索に対応し、インデックスの構築速度は従来の約4倍に向上しました。毎日数百万件の差分更新も処理しています。
OceanBaseへの統合によって、ElasticsearchとFaissをそれぞれ運用し、容量や負荷に応じて個別に拡張する手間がなくなりました。可用性の確保とSQLによる開発も、一つのデータベースで対応できます。
Lalamoveは以前、ベクトル検索にWeaviate、業務データにリレーショナルデータベースを使っていました。同時アクセスが増えると障害が頻発し、障害時に処理を正常なノードへ自動で切り替えることも難しい状況でした。
OceanBaseへの統合後は、高負荷でも安定して稼働しています。ベクトル検索と大規模言語モデルは、障害や損失につながるおそれのあるコードを検出する仕組みや、データウェアハウスに関する質問にAIが回答する仕組みに活用されています。
障害時は、複数のノード間でデータの整合性を保つPaxosを基盤に、自動復旧を行います。バックアップとリストアの機能も利用し、障害への対応力を高めています。今後は、Milvusなど、ほかのベクトルデータベースも段階的にOceanBaseへ移行する計画です。
Weaviateクラスタを個別に管理する負担がなくなったことに加え、HNSWの量子化による圧縮で、同じ規模のデータをより少ないメモリで扱えるようになりました。
OceanBaseの強みは、データ量に応じて拡張できること、SQLとベクトル検索をまとめて最適化できること、そしてインデックスの選択によってメモリとストレージのコストを調整できることです。ベクトル検索にも業務データと共通の可用性の仕組みを使えるため、次のような要件がある場合に適しています。
比較検証には、ベクトルデータベースの性能を測るツール「VectorDBBench」も利用できます。OceanBaseが公開しているテスト手順では、100万件・768次元、50万件・1,536次元などのデータを使い、ベクトル検索のみのケースと、条件による絞り込みを伴うケース(フィルタ率1%・99%)を比較しています。自社の検索条件に近いケースを選ぶ際の参考になります。詳しくは、公式サイトのVectorDBBenchに関するテスト手順をご覧ください。
社内PoCや数百件程度のベクトルを使った検証であれば、幅広い製品を利用できます。将来的に数千万件以上を扱い、ベクトルデータと業務データを長期にわたって運用するなら、検索速度だけでなく、拡張時の作業や日々の運用、必要なメモリ容量まで含めて比較することが重要です。そうした観点を重視するなら、OceanBaseは検討に値する選択肢といえます。

1. データベースのインスタンスが増えると、運用はどう変わるのか 事業が成長し、マイクロサービスの導入が進むと、注文、ユーザー、在庫、レポートなどのサービスごとに、独立したデータベースが必要になることがあります。開発、テスト、ステージング、本番の各環境に加え、顧客やチャネルごとにデータを分離する必要も出てきます。その結果、わずか1〜2年で、インスタンス数が十数個から100を超える規模に増えることもあります。これらを個別に管理していると、監視、変更作業、原因調査、復旧にかかる負担も増していきます。 アラートが増え、重要な問題を見つけにくくなる。100個のインスタンスで監視システム、アラートルール...


分散データベースで高可用性を設計する際、2ノードのプライマリ・スタンバイのような偶数レプリカ構成には根本的な弱点があります。ノード障害やネットワーク分断が起きると過半数を確保できず、安全に新しいリーダーを選べなくなるためです。 この問題への一般的な対策は、3つ目の参加者を加えて投票総数を奇数にすることです。そうすれば、スプリットブレインを防ぎながら合意形成を進めやすくなります。 ただし、この3つ目の参加者が必ずしも完全なデータレプリカである必要はありません。必要なのは、投票に参加し、障害時にクラスタの合意形成を支えることです。OceanBase 4.xでは、この役割を「アービトレーションサービ...


これまでの記事では、OceanBaseが、ネイティブ分散アーキテクチャによってアプリケーションをシャーディングから解放する仕組みや、テナントのリソース構成を変更することでトラフィックの変動に秒単位で追従する仕組みを紹介してきました。 テナント(独立したリソース割り当てを持つDBインスタンスに相当)のリソース構成を変更する場合、既存の物理マシン上でCPUやメモリなどの割り当てを再配分するだけで済むため、ハードウェアの変更は不要です。業務時間中でも実行でき、アプリケーションからは完全に透過的で、サービス停止も発生しません。 ただし、この方法にも限界があります。単一マシンで利用できる物理リソースには...
