Azure Cosmos DBのIntegrated Vector Databaseとは?変更点と移行・設定の注意点

Azure Cosmos DBの「Integrated Vector Database」は、ベクトル検索専用の外部データベースを必ず追加するのではなく、Azure Cosmos DB内に元データとベクトル埋め込みを一緒に保存し、検索・RAG・AIエージェントから直接使うための設計です。結論から言うと、管理者は「機能有効化」「スループット」「コンテナー設計」「インデックス変更のしづらさ」を確認し、開発者は「ベクトルの次元数」「距離関数」「インデックス種別」「TOP N付きのクエリ」「移行時の再埋め込み」を重点的に見直す必要があります。

Microsoft Learnの公式情報では、Azure Cosmos DBの統合ベクトルデータベースはNoSQLとPostgreSQLを対象に説明されています。ただし、実務で新規採用を検討する場合は、Azure Cosmos DB for NoSQLを中心に評価するのが安全です。特にAzure Cosmos DB for PostgreSQLについては、関連ドキュメントで退役パスにあることが示されており、新規プロジェクトでは推奨されていません。(Microsoft Learn) (Microsoft Learn)

目次

Integrated Vector Databaseで何が変わるのか

今回のポイントは、Azure Cosmos DBが「アプリケーションデータの保存先」にとどまらず、ベクトル検索を含むAIアプリケーションのデータ基盤として使いやすく整理されたことです。

従来のRAG構成では、業務データをAzure Cosmos DBや他のDBに保存し、ベクトル埋め込みは別のベクトルデータベースや検索サービスに複製する構成がよく使われました。この構成は柔軟ですが、同期処理、データ整合性、運用コスト、障害時の切り分けが複雑になりやすいのが難点です。

Integrated Vector Databaseでは、元データとベクトル埋め込みを同じCosmos DBのデータモデル内で扱えます。Microsoftの公式説明でも、埋め込みと元データを同じ場所に置くことで、別の純粋なベクトルデータベースへ複製するコストを減らし、データ整合性、スケール、パフォーマンスを高めやすいとされています。(Microsoft Learn)

観点従来ありがちな構成Integrated Vector Databaseの考え方
データ配置業務DBとベクトルDBを分離元データとベクトルをCosmos DB内に同居
データ同期変更のたびに別DBへ同期が必要同じ論理データに近い形で管理しやすい
検索外部ベクトルDBへ問い合わせCosmos DB for NoSQLでVectorDistanceを使って検索
運用DB、検索、同期基盤を別々に監視Cosmos DB側のRU、インデックス、パーティション設計が重要
注意点外部DBのコスト・整合性Cosmos DBの制限、インデックス設計、移行計画

つまり、「専用ベクトルDBが不要になる」と単純に考えるより、Cosmos DB上の業務データをAI検索・RAGに近づける選択肢が増えたと捉えるのが現実的です。

影響を受ける対象者

Integrated Vector Databaseの影響が大きいのは、次のような管理者・開発者です。

対象者確認すべき理由
Azure Cosmos DB for NoSQLの管理者アカウント機能、スループット、インデックス、パーティション設計が検索性能とRUに直結する
RAGアプリ開発者埋め込みの保存先、検索クエリ、プロンプトへの渡し方を見直す必要がある
外部ベクトルDBを併用しているチーム同期処理や二重管理をCosmos DBへ集約できるか検討できる
生成AI基盤のアーキテクトAI Search、専用ベクトルDB、Cosmos DB内蔵検索の使い分けが必要になる
Cosmos DB for PostgreSQL利用者サービスの退役パスを踏まえた移行判断が必要になる

一方で、全文検索、ランキング、検索UI、フィルター条件、アクセス制御、既存の検索基盤が複雑に絡むシステムでは、Azure AI Searchなどの検索専用サービスと比較検討すべきです。Cosmos DBのベクトル検索は強力ですが、すべての検索要件を置き換える前提で進めると、後から設計変更が大きくなります。

Azure Cosmos DB for NoSQLで利用できる主な機能

Azure Cosmos DB for NoSQLでは、ドキュメント内に通常のJSONデータと高次元ベクトルを一緒に保存できます。公式ドキュメントでは、ベクトルをドキュメントのプロパティとして格納し、flatquantizedFlatdiskANNのインデックス方式を選べることが説明されています。さらに、WHERE句による通常のNoSQLクエリフィルターとベクトル検索を組み合わせられます。(Microsoft Learn)

代表的な検索イメージ

たとえば、商品データに説明文の埋め込みを持たせ、ユーザーの質問に近い商品を検索する場合、次のような考え方になります。

SELECT TOP 10
    c.id,
    c.name,
    VectorDistance(c.embedding, @queryVector) AS similarityScore
FROM c
WHERE c.tenantId = @tenantId
ORDER BY VectorDistance(c.embedding, @queryVector)

ここで重要なのは、TOP Nを必ず付けることです。公式ドキュメントでも、TOP Nを付けないと必要以上に多くの結果を返そうとして、RU消費とレイテンシが増える可能性があるとされています。(Microsoft Learn)

また、VECTORDISTANCE関数は2つのベクトル間の類似度スコアを返します。引数では、インデックスを使うか、ブルートフォース検索にするか、距離関数や検索リスト倍率などを指定できます。精度を上げる設定は、RUやレイテンシ増加とトレードオフになるため、本番前に実データで検証する必要があります。(Microsoft Learn)

管理者が最初に確認すべき設定

Azure Cosmos DB for NoSQLでベクトル検索を使うには、まずアカウント側で機能を有効化します。AzureポータルではCosmos DBリソースの「Features」から「Vector Search for NoSQL API」を有効化し、Azure CLIではEnableNoSQLVectorSearch capabilityを指定できます。登録は自動承認されますが、反映まで最大15分程度かかる可能性があります。(Microsoft Learn)

az cosmosdb update \
  --resource-group <resource-group-name> \
  --name <account-name> \
  --capabilities EnableNoSQLVectorSearch

管理者が確認すべきポイントは、機能をオンにできるかだけではありません。特に以下は、展開前に必ずチェックしてください。

確認項目確認内容失敗しやすいポイント
アカウント機能NoSQL Vector Searchが有効か有効化直後にデプロイして、まだ反映されていない
スループット共有スループットを使っていないか公式制限により、現時点では共有スループットのアカウントでベクトルインデックスと検索はサポートされない
コンテナー設計ベクトルパス、次元数、距離関数を決めているか後から簡単に変更できる前提で設計してしまう
インデックスflatquantizedFlatdiskANNのどれを使うか小規模検証の結果だけで大規模本番に展開する
RUとレイテンシ検索時と投入時のRUを測定しているか埋め込みの一括投入でインデックス構築時間を見落とす
パーティション検索範囲をパーティションキーやWHERE句で絞れるか全体検索前提になり、RUと応答時間が悪化する

公式ドキュメントでは、quantizedFlatdiskANNは少なくとも1,000件のベクトルが必要で、少ない場合はフルスキャンになること、flatは最大505次元、quantizedFlatdiskANNは最大4,096次元であること、短時間に500万件を超えるような大量投入ではインデックス構築時間に注意が必要なことが示されています。さらに、コンテナーでベクトルインデックスと検索を有効化すると無効化できない点も重要です。(Microsoft Learn)

開発者が設計すべきベクトルポリシー

ベクトル検索を行うには、コンテナーにベクトルポリシーを定義します。ベクトルポリシーでは、どのプロパティにベクトルが入るのか、データ型、次元数、距離関数を指定します。対応するデータ型はfloat32float16int8uint8で、距離関数はcosinedot producteuclideanを選べます。(Microsoft Learn)

{
  "vectorEmbeddings": [
    {
      "path": "/embedding",
      "dataType": "float32",
      "distanceFunction": "cosine",
      "dimensions": 1536
    }
  ]
}

この設定で特に重要なのは、埋め込みモデルの次元数とCosmos DB側のdimensionsを一致させることです。たとえば、開発中に埋め込みモデルを変更すると、出力されるベクトルの次元数が変わる場合があります。そのまま投入すると検索できない、または移行時に再埋め込みが必要になる可能性があります。

float16を使うとベクトルの保存容量を削減できますが、精度低下が起きる可能性があります。公式ドキュメントでも、多くの埋め込みモデルはfloat32を使う一方、float16はストレージを50%削減できるが精度が下がる可能性があると説明されています。(Microsoft Learn)

インデックス種別の選び方

Azure Cosmos DB for NoSQLのベクトルインデックスは、ワークロードに合わせて選ぶ必要があります。単に「高速そうだからDiskANN」と決めるのではなく、データ件数、検索範囲、精度要件、RU予算で判断します。

インデックス種別向いているケース注意点
flat小規模で、完全な再現率を重視する検索最大505次元。高次元の一般的なLLM埋め込みには合わない場合がある
quantizedFlatフィルターで検索対象を絞れる小〜中規模検索圧縮により精度がわずかに下がる可能性がある。1,000件未満ではフルスキャンになる
diskANN大規模なベクトル検索、低レイテンシ、低RUを狙う本番用途近似最近傍検索なので、精度と速度の検証が必要。1,000件未満では効果を確認しにくい

公式情報では、quantizedFlatは検索対象が50,000ベクトル以下に絞られるシナリオの目安として示され、diskANNは50,000ベクトルを超える検索範囲で特に高性能な選択肢として説明されています。ただし、これは一般的なガイドラインであり、実際の性能はシナリオごとにテストすべきとされています。(Microsoft Learn)

本番展開では、次の3つのメトリックを必ずセットで測定してください。

指標見るべき理由
Recall本当に欲しい文書・商品・FAQが上位に出ているか
RU消費クエリコストが想定内か
P95/P99レイテンシユーザー体験やAPIタイムアウトに影響しないか

特にRAGでは、検索結果の上位数件が回答品質を大きく左右します。平均レイテンシだけでなく、「正しい根拠が上位に来るか」を評価しないと、運用後に回答の品質問題として表面化します。

設定変更と移行で注意すべきポイント

ベクトルポリシーとベクトルインデックスは、通常のアプリ設定のように気軽に変更できるものではありません。公式ドキュメントでは、新しいパス構成の追加や削除はできる一方、既存のベクトル埋め込みポリシーやインデックス設定を直接変更することはできず、変更時は既存ポリシーやインデックスを削除して新しい構成で追加し直す必要があるとされています。(Microsoft Learn)

そのため、次のような設計ミスは避けるべきです。

失敗例起きる問題対策
/vector1のような仮名で本番作成する後から意味のあるパスに変えたくなる/embedding/contentVectorなど用途が分かる名前にする
埋め込みモデルを未確定のまま次元数を決めるモデル変更時に再作成・再投入が必要になるモデル、次元数、距離関数を先に固定する
ベクトルを配列の中にネストするベクトルポリシーやインデックスで使えない可能性があるベクトルはルート直下または明確なプロパティに置く
検証データが1,000件未満quantizedFlatdiskANNの効果を判断できない本番に近い件数で性能検証する
TOP句なしで検索するRUとレイテンシが増えやすい必ずSELECT TOP Nを使う

公式制限では、ワイルドカード文字や配列内にネストされたベクトルパスは、ベクトルポリシーまたはベクトルインデックスで現在サポートされていません。ドキュメント構造を柔軟にしすぎると、後から検索対象として扱えないデータが出るため、ベクトル用プロパティは最初から固定しておくのが安全です。(Microsoft Learn)

外部ベクトルDBから移行する場合の進め方

すでにPinecone、Milvus、Qdrant、Azure AI Searchなどにベクトルを持っている場合、いきなりCosmos DBへ切り替えるのは危険です。特にRAGでは、検索結果の順位が少し変わるだけで回答の根拠が変わります。

移行は次の順序で進めると失敗しにくくなります。

手順作業内容判断基準
現状棚卸しベクトル件数、次元数、距離関数、メタデータ、フィルター条件を確認Cosmos DBの制限内に収まるか
スキーマ設計元データと埋め込みを同じドキュメントに持たせるか決める更新頻度とドキュメントサイズを確認
新コンテナー作成ベクトルポリシーとインデックスを定義後から変更しない前提でレビュー
バックフィル既存データから埋め込みを投入RU、投入速度、インデックス構築時間を見る
二重書き込み旧ベクトルDBとCosmos DBへ同時書き込み差分や欠損がないか
シャドー検索本番ユーザーには見せず、同じクエリで検索結果を比較Recall、順位、回答品質を比較
段階的切り替え一部トラフィックからCosmos DB検索へ移行エラー率、RU、レイテンシを監視

移行時に最も見落とされやすいのは、埋め込みの再生成コストです。元のベクトルDBで使っていた埋め込みモデル、前処理、チャンク分割、正規化、距離関数が分からないと、同じデータを移しても検索結果が変わります。移行前に「どのテキストから、どのモデルで、どの次元数のベクトルを作ったか」を必ず記録してください。

RAGアプリでの実装ポイント

Azure Cosmos DBのIntegrated Vector Databaseは、RAGとの相性が高い機能です。公式ドキュメントでも、Azure Cosmos DB for NoSQLを使う単純なRAGパターンとして、NoSQLベクトルインデックスの有効化、コンテナーベクトルポリシーとベクトルインデックスの設定、データ挿入、Azure OpenAI Embeddingsによる埋め込み作成、ベクトル類似検索、Azure OpenAI Completionsモデルによる回答生成が示されています。(Microsoft Learn)

実装時は、次のように責務を分けると保守しやすくなります。

レイヤー役割実装時の注意
取り込み文書、商品、FAQなどを分割して保存チャンクサイズとメタデータを固定する
埋め込み生成Azure OpenAI Embeddingsなどでベクトル化モデル名、バージョン相当、次元数を記録する
保存Cosmos DBに元データとベクトルを保存ベクトルパスを固定し、配列内に入れない
検索VectorDistanceWHERE句で候補を取得テナント、カテゴリ、公開状態などで絞り込む
生成検索結果をプロンプトに渡す根拠文書IDや更新日時も一緒に渡す
評価回答品質、Recall、RU、レイテンシを測るモデル変更時に再評価する

RAGで重要なのは、ベクトル検索だけを改善しても不十分な点です。チャンク分割が粗すぎると、検索結果に不要な文脈が混ざります。逆に細かすぎると、回答に必要な背景が欠けます。Cosmos DBに保存する時点で、sourceIdchunkIdtenantIdcategoryupdatedAtなどのメタデータを持たせておくと、検索結果のフィルター、監査、再生成がしやすくなります。

PostgreSQL利用者は新規採用を慎重に判断する

公式のIntegrated Vector Databaseページでは、Azure Cosmos DB for PostgreSQLも対象として挙げられています。一方で、pgvectorの関連ドキュメントでは、Azure Cosmos DB for PostgreSQLは退役パスにあり、新規プロジェクトでは推奨されないと説明されています。PostgreSQLワークロードではAzure Database for PostgreSQLのElastic Clusters、NoSQLワークロードではAzure Cosmos DB for NoSQLの利用が案内されています。(Microsoft Learn)

そのため、これから新しくAIアプリやRAG基盤を作る場合、次のように判断するとよいでしょう。

要件推奨される検討先
JSONドキュメント中心、グローバル分散、低レイテンシが重要Azure Cosmos DB for NoSQL
PostgreSQL互換、SQL資産、Citus系の水平分散が重要Azure Database for PostgreSQL Elastic Clusters
既存のCosmos DB for PostgreSQLを利用中退役パスを踏まえた移行計画を作る
検索UI、全文検索、セマンティックランキングも重視Azure AI Searchなど検索サービスとの併用も検討

「PostgreSQLでも使える」と「これから新規で選ぶべき」は別の話です。既存環境の延命ではなく、新規開発や長期運用を前提にするなら、公式の退役方針を確認したうえでサービス選定を行ってください。

本番展開前のチェックリスト

本番環境へ展開する前に、少なくとも以下を確認しておくと、後戻りのコストを減らせます。

チェック項目確認結果
NoSQL Vector Search機能を対象アカウントで有効化した
共有スループットの制限に該当しないことを確認した
埋め込みモデル、次元数、距離関数を固定した
ベクトルパスを配列内に置いていない
flatquantizedFlatdiskANNの選定理由を記録した
1,000件未満の検証だけで性能判断していない
TOP N付きの検索クエリを使っている
RU、P95/P99レイテンシ、Recallを測定した
大量投入時のインデックス構築時間を検証した
旧ベクトルDBからの切り戻し手順を用意した
PostgreSQL利用時は退役パスと移行先を確認した

特に管理者と開発者で認識を合わせたいのは、ベクトル検索が「アプリ機能」ではなく「データ基盤の設計」に関わる点です。後から検索精度だけを調整するつもりでも、実際にはパーティション、RU、インデックス、データ投入方式、埋め込みモデルまで影響します。

まず何から始めるべきか

Azure Cosmos DBのIntegrated Vector Databaseを検討するなら、最初にやるべきことは本番導入ではなく、既存データの代表サンプルで小さなRAG検索を作り、Recall、RU、レイテンシを測ることです。

具体的には、FAQ、商品説明、社内文書などから数千〜数万件のチャンクを用意し、Azure Cosmos DB for NoSQLにベクトルポリシーとインデックスを設定します。そのうえで、実際のユーザー質問に近いクエリを流し、上位結果が業務的に正しいかを確認します。quantizedFlatdiskANNの比較、WHERE句による絞り込み、TOP Nの件数変更を試すと、本番で必要なRUと応答時間の目安が見えてきます。

Integrated Vector Databaseは、Azure Cosmos DBを使っている組織にとって、RAGやAIエージェントの構成をシンプルにできる有力な選択肢です。ただし、便利さだけで進めると、インデックス変更、スループット制限、移行時の再埋め込みでつまずきます。まずは対象データ、検索要件、埋め込みモデル、インデックス種別を決め、検証環境で測定してから段階的に展開するのが最も確実です。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次