Docs Menu
Docs Home
/
Atlas
/

配置オプションを検討する

本番前または本番環境のニーズに合わせて、さまざまな配置タイプ、クラウドプロバイダー、およびクラスター階層を使用して Atlas クラスターを構成できます。 これらの推奨事項を使用して、配置タイプ、クラウドプロバイダーとリージョン、およびベクトル検索を実行するためのクラスターと検索階層を選択します。

environment
配置タイプ
クラスター階層
クラウドプロバイダーのリージョン
ノード アーキテクチャ

クエリのテスト

Flex cluster, dedicated cluster

Local deployment
M0 or higher tier

N/A
All


N/A

MongoDB プロセスと Search プロセスは同じノードで実行

アプリケーションのプロトタイプ作成

専用クラスター

Flex クラスター、M10M20、またはそれ以上の階層

すべて

MongoDB プロセスと Search プロセスは同じノードで実行

本番環境

個別の検索ノードを持つ専用クラスター

M10 以上のクラスター階層とS30以上の検索階層

一部の リージョンではAmazon Web ServicesとAzureまたはすべてのリージョンのGoogle Cloud Platform

MongoDB プロセスと Search プロセスは異なるノードで実行

これらの配置モデルの詳細については、次のセクションを確認してください。

  • 環境のテストとプロトタイプ作成

  • 本番環境

Atlas Vector Search はインデックス全体をメモリに保持するので、Atlas Vector Search インデックスと JVM に十分なメモリがあることを確認する必要があります。各インデックスは、インデックスが作成されるベクトルと追加のメタデータの組み合わせです。インデックスのサイズは、主にインデックスを作成するベクトルのサイズによって決まります。メタデータ スペースは通常、比較的わずかなものです。

単一のベクトルの次の要件を考慮してください。

埋め込みモデル
ベクトル次元
スペース要件

OpenAI text-embedding-ada-002

1536

6kb

Google text-embedding-gecko

768

3kb

Cohere embed-english-v3.0

1024

1.07kb (for int8)
0.167kb (for int1)

BinData 量子化ベクトル。詳しくは、「量子化されたベクトルの取り込み」をご覧ください。

必要なスペースは、インデックスを作成するベクトルの数とベクトル次元に応じて直線的に増加します。 また、 Search Index Sizeメトリクスを使用して、検索ノードに必要なスペースとメモリの量を判断することもできます。

BinData または量子化ベクトルを使用すると、binData または量子化ベクトルを使用しない場合と比較して、リソース要件が大幅に削減されます。以下の点にご注意ください。

  • mongod 上のベクトルのディスクストレージは、binData ベクトルを使用することで 66% 減少します。

  • mongot 上のベクトルの RAM 使用量は、自動ベクトル量子化または量子化ベクトル取り込みを使用することで、ベクトル圧縮により 3.75倍 (スカラー) または 24倍 (バイナリ) 減少します。

自動量子化を使用すると、Atlasは再スコアリングまたは正確な検索のために全精度ベクトルをディスクに保存し、再スコアリングのためのRAMとキャッシュの使用を最小限に抑えます。

Atlas Vector Search のインデックス定義で自動量子化を有効にする場合、クラスターのサイズを決定する際にディスク容量も考慮する必要があります。これは、Atlas Vector Search が ENN 検索および自動量子化を設定した場合の再スコアリングのために、最高精度のベクトルをディスクにも保存するためです。したがって、使用するハードウェアにおいて、ディスクと RAM の比率が適切であることを確認してください。スカラー量子化のためにストレージとRAMの比率が約 4:1、またはバイナリ量子化のためにストレージとRAMの比率が約 24:1 に対応できる検索ノードを設定することを検討してください。

この例は、my-embeddings という名前のフィールドに保存されている OpenAI の 1000万、1536 次元の埋め込みのバイナリ量子化を設定する方法を示しています。

{
"fields":[
{
"type": "vector",
"path": "my-embeddings",
"numDimensions": 1536,
"similarity": "euclidean",
"quantization": "binary"
}
]
}

次の式を使用して、再スコアリングを備えたバイナリ量子化対応インデックスのディスク容量を概算します。

Original index size * (25/24)

ここで、分母の 24 は、元のインデックスサイズを 24 の部分に分けて、分数をより簡単に表現しています。分子の 25 は、バイナリベクトルを格納するために必要な追加データのための、元のインデックスサイズの約 1 / 24 に相当する追加スペース割り当てを示しています。オリジナルのインデックスと Hierarchical Navigable Small Worlds(HNSW)グラフはディスクに保存されています。HNSW グラフが圧縮されていないため、オーバーサイズ係数は 1 / 32 ではなく 1 / 24 です。

元のインデックス サイズが 1 GB であると仮定します。以下に示すように、再スコアリングを使用してバイナリ量子化インデックスサイズを計算できます。

1 GB * (25/24) = 1.042 GB

重要

Atlas UI では、Atlas はインデックス全体のサイズを表示しますが、Atlas は RAM とディスクに保存されているインデックス内のデータ構造の内訳を表示しないため、サイズが大きくなる可能性があります。Atlas Search のメトリクスは、自動量子化を有効にすると、メモリに保持されるインデックスが非常に小さくなることを示しています。

自動量子化を設定したベクトルには、推定インデックスサイズの 125% に相当する空きディスク容量を割り当てることをお勧めします。

ベクトル検索クエリをテストし、アプリケーションのプロトタイプ作成には、次の構成が推奨されます。

Atlas ベクトル検索クエリをテストするには、 Flex クラスター、専有クラスター、またはローカル Atlas 配置を使用できます。

無料クラスターには M0 階層が含まれます。 Flex クラスターは、 MongoDB を学習しているチームや、小規模な概念実証アプリケーションを開発しているチームに適した低コストのクラスタータイプです。 Atlas Flex クラスターでプロジェクトを開始し、将来的に本番環境に対応できる専用クラスター層にアップグレードすることができます。

これらの低コストのクラスタータイプは、Atlas ベクトル検索クエリをテストするために使用できます。ただし、Flex クラスターではリソース競合とクエリレイテンシが発生する可能性があります。 Flex クラスターでプロジェクトを開始した場合は、アプリケーションのアプリケーションが準備できたら、より高い階層にアップグレードすることをお勧めします。

専有クラスターにはM10以上の階層が含まれます。 M10階層とM20 階層はアプリケーションのプロトタイプ作成に適しています。アプリケーションが本番環境に準備が整ったら、大規模なデータセットを処理したり、ワークロードを分離するために専用の検索ノードを配置したりするために、上位階層にアップグレードできます。

選択したクラウド プロバイダーとリージョンは、クラスター階層で利用可能な構成オプションとクラスターの実行コストに影響します。

すべてのクラスター階層は、サポートされているすべてのクラウドプロバイダーリージョンで利用できます

Atlas Vector Search クエリをローカルでテストしたい場合は、Atlas CLI を使用して、ローカル コンピューターでホストされている単一ノードのレプリカセットを配置できます。 開始するには、 Atlas Vector Search クイック スタートを完了し、ローカル配置の [] タブを選択します。

アプリケーションの本番環境が準備できたら、ライブ移行を使用してローカル Atlas の配置を本番環境に移行します。 ローカル配置は、ローカル マシンの CPU、メモリ、およびストレージ リソースによって制限されます。

テストおよびプロトタイピング環境では、MongoDB プロセスと Atlas Search プロセスが同じノードで実行されるノード アーキテクチャを推奨します。この配置モデルの次の図では、Atlas Search mongot プロセスが Atlas クラスター内の各ノードで mongod と並行して実行され、同じリソースを共有します。

Atlas Search のアーキテクチャ

デフォルトでは、最初の Atlas Vector Search インデックスを作成する際に、Atlas は mongot プロセスを、mongod プロセスを実行するのと同じノードで有効にします。

クエリを実行する際、Atlas Search は構成済みの読み込み設定(read preference)を使用して、クエリを実行するノードを識別します。クエリはまず MongoDB プロセスに送られます。このプロセスは、レプリカセット クラスターの場合は mongod、シャーディングされたクラスターの場合は mongos です。

レプリカセットクラスターの場合、mongod プロセスはクエリを同じノードの mongot にルーティングします。シャーディングされたクラスターの場合、クラスタデータは mongod インスタンス(シャード)に分割され、各 mongot プロセスは同じノードの mongod インスタンスのデータにのみアクセスできます。したがって、特定のシャードを対象とする Atlas Search クエリは実行できません。mongos はクエリをすべてのシャードにルーティングするため、これらは スキャッター ギャザー クエリになります。ゾーンを使用してシャーディングされたコレクションをクラスター内のシャードのサブセットにわたって分散する場合、Atlas Search はクエリしているコレクションのシャードを含むゾーンにクエリをルーティングして、コレクションが配置されているシャードのみで $search クエリを実行します。

クエリが Atlas Search mongot プロセスにルーティングされた後、mongot プロセスは検索とスコアリングを実行し、一致する結果のドキュメントIDとその他の検索メタデータを対応するmongodプロセスに返します。次に、mongod プロセスは一致する結果に対してドキュメント全体の検索を暗黙的に実行し、その結果をクライアントに返します。クエリで $search 同時実行オプションを使用すると、Atlas Search はクエリ内並列処理を有効にします。詳細については、「セグメント間でのクエリ実行の並列化」を参照してください。

mongot プロセスの詳細については、「クエリ処理」を参照してください。

Atlas がデータベースと検索ワークロードを同じノードで実行する場合、MongoDB ストレージはノードの利用可能なメモリ(RAM)の一定割合を使用し、残りは Atlas Vector Search インデックスと mongot プロセスに割り当てられます。

階層
合計メモリ(GB)
Atlas Vector Search インデックスで使用可能なメモリ(GB)

M10

2

1

M20

4

2

M30

8

4

M10M20M30 のクラスター階層では、25% が MongoDB 用に予約されており、残りの 75% は Atlas Vector Search インデックスを含む他の操作に使用されます。M40+ クラスター階層では、50% が MongoDB に予約され、残りは Atlas Vector Search インデックスを含む他の操作に使用されます。

データベースmongodと検索mongotプロセス間でリソース競合が発生する可能性があります。 これは、インデックスのパフォーマンスとクエリのレイテンシに悪影響を与える可能性があります。 この配置モデルは、環境のテストとプロトタイプ作成のみに推奨します。 本番環境に対応できるアプリケーションと関連する検索ワークロードの場合は、専用の検索ノードに移行することをお勧めします。

本番環境のアプリケーションには、次のクラスター構成が推奨されます。

本番対応のアプリケーションには、ワークロード分離のために専有クラスターに個別の検索ノードが必要です。

専有クラスターにはM10以上の階層が含まれます。 M10階層とM20 階層は開発環境と本番環境に適しています。ただし、上位階層では大規模なデータセットと本番環境のワークロードを処理できます。 検索ワークロード用に専用の検索ノードも配置することをお勧めします。 これにより、検索配置を個別かつ適切に増やすことができます。

検索ノードはGoogle Cloud Platformのすべてのリージョンで利用できますが、 Amazon Web ServicesおよびAzureリージョン のサブセットでのみ利用できます。配置で検索ノードが利用できるクラウドプロバイダーとリージョンを選択する必要があります。

すべてのクラスター階層は、サポートされているクラウドプロバイダー リージョンで利用できます。選択したクラウド プロバイダーとリージョンは、クラスターで使用できる構成オプションと検索層、およびクラスターの実行コストに影響します。

本番環境では、MongoDBプロセスとAtlas Searchプロセスを別々のノードで実行するノードアーキテクチャを推奨します。個別の検索ノードを配置するには、「専用検索ノードへの移行」を参照してください。

この配置モデルの次の図では、Atlas Search mongot プロセスは、mongod プロセスが実行されるクラスター ノードとは別の専用の検索ノードで実行されます。

別の検索ノードのアーキテクチャ

Atlas は、各クラスターまたはクラスター上の各シャードに検索ノードを配置します。たとえば、3 つのシャードを持つクラスターに 2 つの検索ノードを配置すると、Atlas は 6 つの検索ノード(シャードあたり 2 つ)を配置します。また、検索ノードの数と、各検索ノードにプロビジョニングされるリソースの量を構成することもできます。

別個の検索ノードを配置すると、 Atlas はインデックス作成のために各 mongotmongod を自動的に割り当てます。mongotmongod と通信して、保存しているインデックスの変更をリッスンし、同期します。Atlas Vector Search は、mongod プロセスと mongot プロセスの両方が同じノードで実行される配置と同様に、クエリを検索インデックス化して処理します。詳細については、「ベクトル検索のフィールドをインデックス化する方法」と「ベクトル検索クエリの実行」を参照してください。検索ノードを個別にデプロイする方法の詳細については、「ワークロード分離のための検索ノード」を参照してください。

検索ノードに移行すると、Atlas は検索ノードを配置しますが、検索ノード上のクラスター上のすべてのインデックスが正常に構築されるまで、ノードに対するクエリを処理しません。 Atlas が新しいノードにインデックスをビルドする間も、クラスター ノードのインデックスを使用してクエリを処理し続けます。 Atlas は、検索ノードにインデックスを正常にビルドし、クラスター ノード上のインデックスを削除した後にのみ、検索ノードからクエリの処理を開始します。

クエリを実行すると、そのクエリは構成済みの読み込み設定に基づいて mongod にルーティングされます。mongod プロセスは、同一ノード上のロード バランサーを通じて検索クエリを転送します。その結果、mongot プロセス全体にリクエストが分散されます。

Atlas Search mongotプロセスは検索とスコアリングを実行し、一致する結果のドキュメント ID とメタデータをmongodに返します。 次に、 mongodはドキュメント全体で一致する結果の検索を実行し、その結果をクライアントに返します。 クエリで$search同時実行オプションを使用すると、Atlas Search はクエリ内並列処理を有効にします。 詳細については、「セグメント間でのクエリ実行の並列化 」を参照してください。

クラスター上のすべての検索ノードを削除すると、検索クエリー結果の処理が中断されます。 詳細については、「クラスターの変更」を参照してください。 Atlas クラスターを削除すると、Atlas は一時停止し、関連付けられているすべての Atlas Vector Search 配置( mongotプロセス)を削除します。

この配置モデルには、次のメリットがあります。

  • リソースを効率的に利用しながら、検索ワークロード用にリソースの高可用性を確保します。

  • 検索配置のサイズは、データベース配置とは独立してスケーリングします。

  • Atlas Vector Search クエリを同時に自動的に処理することで、特に大規模なデータセットでの応答時間が向上します。 詳細については、「セグメント間での並列クエリ実行」を参照してください。

Atlas Vector Search はインデックス全体をメモリに保持するので、Atlas Vector Search インデックスと JVM に十分なメモリがあることを確認する必要があります。検索ノードは、データの分離を行わずにワークロードの分離を可能にし、RAM の割り当てのほぼ 90% をベクトルデータとメモリ内のインデックスの保存に使用でき、残りは JVM に使用されます。

各インデックスは、インデックスが作成されるベクトルと追加のメタデータの組み合わせです。インデックスのサイズは、主にインデックスを作成するベクトルのサイズによって決まります。メタデータの占める容量は通常、比較的わずかなものです。詳しくは、「ベクトルのインデックス作成におけるメモリ要件」をご覧ください。

専用の検索ノードを配置する場合は、さまざまな検索階層から選択できます。 各検索階層には、デフォルトの RAM 容量、ストレージ容量、および CPU が設定されています。 そのため、データベース配置とは別個にクラスターのサイズを設定および拡張することができます。 検索配置を個別にスケーリングするには、いつでもクラスター構成に次の変更を加えることができます。

  • クラスター上の検索ノードの数を調整します。

  • 検索階層を変更して、ノードの CPU、RAM、ストレージを調整する。

注意

検索ノードと検索階層のコストの詳細については、[ MongoDB 料金] ページで [ View all plan featuresを展開し、[ Atlas Vector Search ] をクリックします。

ノードには、Atlas Vector Search インデックスの合計サイズより少なくとも 10% 大きい RAM があることをお勧めします。また、使用可能な CPU が十分にあることを確認することもお勧めします。クエリのレイテンシは、使用可能な CPU の数によって異なります。これは、クエリのパフォーマンスを加速する内部同時実行のレベルに大きな影響を与える可能性があります。

サイズが約 3 GB の 1M 768 次元ベクトルがあるとします。S30(低 CPU)と S20(高 CPU)検索階層のどちらにも、インデックスをサポートするのに十分な RAM があります。S30(低 CPU)検索階層に配置する代わりに、S20(高 CPU)検索階層に配置することをお勧めします。S20(高 CPU)検索階層ではクエリを同時に実行するために、より多くの CPU が使用できるためです。

検索ノードのすべてのデータを対象にカスタマー キー管理により保管時の暗号化を有効にすると、カスタマーが管理する暗号化キーで Atlas Vector Search のワークロードを保護できます。詳細については、「検索ノードでカスタマーキー管理を有効にする」を参照してください。

この機能は現在 AWS KMS のみで利用可能です。

専用検索ノードを使用すると、クラスターとは別に検索配置のサイズとスケーリングの両方を行うことができます。 また、データベース プロセスと検索プロセスの両方を同じノードで実行するクラスターで発生する可能性のあるリソースの競合も排除されます。

専用検索ノードに移行するには、配置を次の変更で行います。

  1. 配置で現在無料階層クラスターまたは Flex クラスターを使用している場合は、クラスターを上位階層にアップグレードします。専用検索ノードは、M10 以上のクラスター階層でのみサポートされます。別のクラスター層への移行 の詳細については、「 の変更Cluster Tier 」を参照してください。

  2. 専用検索ノードは、Amazon Web ServicesおよびAzureリージョンのサブセット、およびサポートされているすべてのGoogle Cloud Platformリージョンで利用できます。検索ノードも利用できるリージョンに クラスターを配置する ようにします。 既存のクラスターが検索ノードを利用できないリージョンにある場合は、検索ノードが利用できるリージョンにクラスターを移行します。 詳しくは、「 クラウドプロバイダーのリージョン 」を参照してください。

  3. Search Nodes for workload isolationを有効にして、検索ノードを構成します。 詳しくは、「検索ノードを追加する 」を参照してください。

戻る

AIエージェントの構築