Overview
本番前または本番環境のニーズに合わせて、さまざまな配置タイプ、クラウドプロバイダー、およびクラスター階層を使用して Atlas クラスターを構成できます。 これらの推奨事項を使用して、配置タイプ、クラウドプロバイダーとリージョン、およびベクトル検索を実行するためのクラスターと検索階層を選択します。
environment | 配置タイプ | クラスター階層 | クラウドプロバイダーのリージョン | ノード アーキテクチャ |
---|---|---|---|---|
クエリのテスト | Flex or dedicated cluster Local deployment | M0 , Flex, or higher tierN/A | All N/A | MongoDB プロセスと Search プロセスは同じノードで実行 |
アプリケーションのプロトタイプ作成 | シャーディングまたはシャーディングされていない専用クラスター |
| すべて | MongoDB プロセスと Search プロセスは同じノードで実行 |
本番環境 | シャーディングまたはシャーディングされていない個別の検索ノードを持つ専用クラスター |
| MongoDB プロセスと Search プロセスは異なるノードで実行 |
次のセクションでは、各環境について説明します。
環境のテストとプロトタイプ作成
検索クエリをテストし、アプリケーションをプロトタイプするには、以下のセクションで説明されているデプロイメント タイプとノード アーキテクチャをお勧めいたします。
この構成は、次のユースケースに最適です。
インデックスするドキュメントの合計が 2M 未満
10GB 未満のインデックス データ
7 日間で 10,000 件未満のクエリ
使用量が記載された値を超える場合は、専用の検索ノードに移行します。
以下のセクションでは、このノード アーキテクチャについて詳しく説明します。
- 配置タイプ
クラウドのクラスターで Atlas Search クエリをテストするには、 Flex または専有クラスターを配置できます。
Atlas Search クエリをローカルでテストするには、Atlas CLI を使用してローカル Atlas 配置を作成します。これは、ローカル コンピューターでホストされている単一ノードのレプリカセットなどです。ローカル配置は、ローカル マシンの CPU、メモリ、およびストレージリソースによって制限されます。アプリケーションを本番環境で使用する準備ができたら、Atlas のローカル配置を本番環境に移行します。
- Cluster Tiers
Atlas Search クエリをテストするには、無料クラスター(
M0
)と Flex クラスターを使用します。アプリケーションのプロトタイプ作成には、専用の
M10
、M20
以上の階層のクラスターを使用するか、ワークロード分離用に専用の検索ノードを配置します。アプリケーションが本番環境の準備ができたら、大規模なデータセットを処理する準備ができたら、上位階層にアップグレードします。- クラウドプロバイダーとリージョン
サポートされている任意のクラウドプロバイダーリージョンを使用してください。
選択したクラウドプロバイダーとリージョンは、クラスター階層で使用可能な構成オプションとクラスターの実行中コストに影響します。
ノード アーキテクチャ
テストおよびプロトタイピング環境では、MongoDB プロセスと Atlas Search プロセスが同じノードで実行されるノード アーキテクチャを推奨します。この配置モデルの次の図では、Atlas Search mongot
プロセスが Atlas クラスター内の各ノードで mongod
と並行して実行され、同じリソースを共有します。

デフォルトでは 、Atlas は 最初の Atlas Searchインデックスを作成するときに、mongod
プロセスを実行するのと同じノードで Atlas Search mongot
プロセスを有効にします。
クエリを実行する際、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 Search インデックスで保存済みソースフィールド を定義すると、 mongot
プロセスはmongot
の指定フィールドを保存できるようになります。 次に、Atlas Search クエリでreturnStoredSource オプションを使用すると、データベースでドキュメント全体を検索する代わりに、 mongot
から一致するドキュメントの保存済みフィールドを直接検索できます。
メリット
Atlas Search を有効にすると、データベースに自動的に同期する統合されたフルマネージド検索エンジンを使用して、データ上に検索を簡単に構築できます。 Atlas Search は、全文検索用の$search
や$searchMeta
、セマンティック検索用の$vectorSearch
などの Atlas Search 集計パイプライン ステージを、MongoDB の他の集計パイプライン ステージやスコアベースの結果ランキングと組み合わせて使用する豊富な問い合わせ言語を提供します。
クラスターにプロビジョニングされるリソースによっては、同じノードに両方の プロセスを配置した方が、別個の 専用ノードで検索プロセスを実行中よりもコスト効率が高くなる場合があります。
制限
データベース mongod
と検索プロセス mongot
の間でリソース競合が発生する可能性があります。これは、インデックスのパフォーマンスとクエリのレイテンシに悪影響を与える可能性があります。本番環境に対応したアプリケーションとその検索ワークロードをサポートするために、専用の検索ノードに移行します。
コスト
Atlas クラスターで Atlas Search を有効にしても、追加料金や手数料は発生しません。ただし、大規模なインデックス付きコレクションやインデックス定義では、クラスターのリソース使用量が増加する可能性があります。
Considerations
mongod
プロセスと mongot
プロセスの両方が 同じノードで実行されるため、特定の状況下で mongot
が使用できなくなる可能性があります。 次の表では、潜在的な原因について説明しています。
原因 | 説明 |
---|---|
クラスター階層のスケーリング - ネットワーク ストレージ | クラスターを増やすアップまたはスケールダウンすると、Atlas は新しいインスタンスをプロビジョニングします。 インスタンスの準備ができると、Atlas はネットワークストレージを接続し、新しいノードで
|
クラスター階層のスケーリング - ローカルSSD | |
Lucene のダウングレード | Lucene のダウングレードが必要になる稀なケースでは、新しい Luceneインデックス形式を読み取れない可能性があります。 |
ストレージの調整 | Atlas クラスター ノードに接続されたネットワークストレージを保持できます。 これにより、 ただし、クラスターがローカル NVMe ディスクを使用している場合、またはその他のまれな状況では、特定のリージョンではネットワークストレージを保持できない場合があります。このような場合、Atlas は最初の同期を実行し、最初の同期が完了するまで検索クエリは失敗します。 |
|
|
新しい | クラスターに新しいノードを追加すると、Atlas は最初の同期を実行して検索インデックスを作成します。 新しい |
インスタンスの再起動または置換 |
|
|
|
本番環境
本番環境に対応したアプリケーションには、次のセクションで説明する配置タイプとノード アーキテクチャを使用することをお勧めします。
この構成は、次のユースケースに最適です。
既存のテスト環境を本番環境に移行する場合は、専用の検索ノードをクラスターに追加します。詳しくは、「 専用検索ノードへの移行 」を参照してください。
新しい本番環境のデプロイメントをゼロから作成する場合は、Atlas Search が利用可能なリージョンとゾーンで Atlas Search をサポートする
M10
以上の階層クラスターを使用し、専用の検索ノードを環境に追加します。詳細については、専用の検索ノードの追加を参照してください。
- 配置タイプ
本番環境向けのアプリケーションには、
M10
、M20
、およびそれ以上の専有クラスター階層を使用してください。これらの上位階層のクラスターは、大規模なデータセットや本番環境のワークロードを処理できます。専用の検索ノードも配置することをお勧めします。検索要件が増加する場合は、 MongoDBノードをスケールアップするのと別個に検索配置を増やすアップすることができます。
- クラウドプロバイダーとリージョン
すべての Google Cloud リージョンと、AWS および Azure リージョンのサブセットで検索ノードを使用します。配置には、検索ノードが利用可能なクラウド プロバイダーとリージョンを必ず選択する必要があります。
すべてのクラスター階層は、サポートされているクラウドプロバイダー リージョンで利用できます。選択したクラウド プロバイダーとリージョンは、クラスターで使用できる構成オプションと検索層、およびクラスターの実行コストに影響します。
ノード アーキテクチャ
本番環境では、 MongoDBプロセスと Atlas Search プロセスが別々のノードで実行されるノードアーキテクチャを推奨します。個別の検索ノードを配置するには、専用検索ノードへの移行を参照してください。
この配置モデルの次の図では、Atlas Search mongot
プロセスは、mongod
プロセスが実行されるクラスター ノードとは別の専用の検索ノードで実行されます。

Atlas は、各クラスターまたはクラスター上の各シャードに検索ノードを配置します。たとえば、3 つのシャードを持つクラスターに 2 つの検索ノードを配置すると、Atlas は 6 つの検索ノード(シャードあたり 2 つ)を配置します。また、検索ノードの数と、各検索ノードにプロビジョニングされるリソースの量を構成することもできます。
別個の検索ノードを配置すると、 Atlas はインデックス作成のために各 mongot
に mongod
を自動的に割り当てます。mongot
は mongod
と通信して、保存しているインデックスの変更をリッスンし、同期します。Atlas Search は、mongod
プロセスと mongot
プロセスの両方が同じノードで実行される配置と同様に、クエリを検索インデックス化して処理します。詳細は、「Atlas Search インデックスの管理」および「クエリとインデックス」を参照してください。検索ノードを個別に配置する方法の詳細については、「ワークロード分離のための検索ノード」を参照してください。
検索ノードに移行すると、Atlas は検索ノードを配置しますが、検索ノード上のクラスター上のすべてのインデックスが正常に構築されるまで、ノードに対するクエリを処理しません。 Atlas が新しいノードにインデックスをビルドする間も、クラスター ノードのインデックスを使用してクエリを処理し続けます。 Atlas は、検索ノードにインデックスを正常にビルドし、クラスター ノード上のインデックスを削除した後にのみ、検索ノードからクエリの処理を開始します。
クエリを実行すると、そのクエリは構成済みの読み込み設定に基づいて mongod
にルーティングされます。mongod
プロセスは、同一ノード上のロード バランサーを通じて検索クエリを転送します。その結果、mongot
プロセス全体にリクエストが分散されます。
Atlas Search mongot
プロセスは検索とスコアリングを実行し、一致する結果のドキュメント ID とメタデータをmongod
に返します。 次に、 mongod
はドキュメント全体で一致する結果の検索を実行し、その結果をクライアントに返します。 クエリで$search
同時実行オプションを使用すると、Atlas Search はクエリ内並列処理を有効にします。 詳細については、「セグメント間でのクエリ実行の並列化 」を参照してください。
クラスター上のすべての検索ノードを削除すると、検索クエリー結果の処理が中断されます。 詳細については、「クラスターの変更」を参照してください。 Atlas クラスターを削除すると、Atlas は一時停止し、関連付けられているすべての Atlas Search 配置( mongot
プロセス)を削除します。
Atlas Search インデックスで保存済みソースフィールド を定義すると、 mongot
プロセスはmongot
の指定フィールドを保存できるようになります。 次に、Atlas Search クエリでreturnStoredSource オプションを使用すると、データベースでドキュメント全体を検索する代わりに、 mongot
から一致するドキュメントの保存済みフィールドを直接検索できます。
メリット
別個の検索ノードを配置すると次のメリットが得られます。
- 高可用性
- 別個の検索ノードを配置すると、Atlas は少なくとも 2 つの検索ノードを強制して、障害や中断が発生した場合にワークロードが最小限のダウンタイムで機能し続けるようにします。
- スケーラビリティ
検索ノードを個別に配置すると、MongoDB クラスターから独立してストレージと計算能力をスケールできます。これにより、MongoDB とは独立してクエリ負荷をスケールすることも可能です。
検索ノードを水平方向にスケールするには、検索ノードの数を増減します。最小2個から最大32個までの検索ノードをプロビジョニングできます。クエリ負荷を均等にするために、Atlas Search は利用可能なすべての検索ノードに検索クエリを分散します。
検索ノードを垂直方向にスケールするには、フルテキストワークロードをサポートするさまざまな検索階層、CPU、RAM、およびストレージ構成を選択します。
- パフォーマンス
専用の検索ノードを導入することで、
mongod
およびmongot
プロセスのパフォーマンスとリソース利用率が向上し、これらのプロセス間のリソース競合が解消されます。専用検索ノードは 同時セグメント検索 をサポートしており、Atlas Search が複数のインデックスセグメントを同時に検索できるようにしています。同時セグメント検索を使用すると、クエリの応答時間が改善される場合があります。
検索ノードのサイズ設定とスケーリングに関するヒント
検索ノードのメモリ要件を決定するには、次の Atlas メトリクスを使用します。
検索インデックスのサイズ
検索ノード上の RAM の合計
検索インデックスが 10 GB で、検索ノードの合計 RAM が 4 GB のアプリケーションを考えてみましょう。この場合、1GBのRAMが他のプロセスで使用され、インデックスデータ用に3GBのみが使用可能な場合、残りの7GBのインデックスデータ(10GB - 3GB = 7GB)は、必要に応じてディスクからページインされます。ディスクからの頻繁なページングは、ページフォールト、ディスク I/O、CPU IOWait の増加を引き起こし、パフォーマンスの低下を招きます。
8GB 以上の RAM を持つ上位のクラスター階層を使用すると、Atlas は検索インデックスの大部分のデータをメモリから提供でき、ディスクの読み取りとページ フォールトを最小化され、パフォーマンスが向上します。
注意
検索ノードに使用されるローカル SSD では、インデックス操作をサポートするために 20% のストレージ オーバーヘッドが必要です。
検索ノードのコスト
MongoDB は(M10
以上)の専有クラスターで個別の検索ノードをサポートします。検索ノードは、コンピュート集約型 NVMe インスタンスに配置されます。少なくとも 2 つのノードを配置する必要があります。ノードごとのリソース使用量が時間単位で毎日請求されます。詳細については、「検索ノードのコスト」を参照してください。
保存時の暗号化の有効化
カスタマーマネージド暗号化のキーでAtlas Searchワークロードを保護するために、検索ノードのすべてのデータに対し、カスタマーキーマネージメントで保管時の暗号化を有効にすることができます。詳しくは、「検索ノードでカスタマーキー管理を有効にする」を参照してください。
この機能は現在、 AWS上の検索ノードで利用可能です。
専用検索ノードの追加
新しいクラスターに専用の検索ノードを追加すると、次のことが可能になります。
クラスターから独立して、検索デプロイメントのサイズとスケールを変更します。
MongoDBデータベースと検索プロセスを同じノードで実行するクラスターで発生する可能性のあるリソース競合を解消します。
専用の検索ノードを追加するには以下の手順に従います。
ノード分離をサポートするクラウドプロバイダーとリージョンで、
M10
以上の階層としてクラスターを作成します。詳細については、「クラスターの作成」を参照してください。専用検索ノードは、
M10
以上のクラスター階層と、ノード分離 をサポートするクラウドプロバイダーリージョンでのみサポートされます。Search Nodes for workload isolationを有効にし、検索ノードを構成します。
専用検索ノードへの移行
ステージングから本番環境に移行し、専用の検索ノードを追加するには、既存のステージングとプロトタイプ作成の配置に次の変更を加えます。
配置で Flex クラスターを使用している場合は、クラスター層をより高い階層に変更します 。専用検索ノードは、
M10
以上のクラスター階層でのみサポートされます。検索ノードが利用可能なリージョンにクラスターを配置します。専用の検索ノードは AWS および Azure の一部のリージョン、ならびにサポートされているすべての Google Cloud リージョンで利用可能です。既存のクラスターが検索ノードを利用できないリージョンでホストされている場合、検索ノードを利用できるリージョンにクラスターを移行してください。詳細については「ノード分離をサポートするクラウドプロバイダーのリージョン」をご覧ください。
Search Nodes for workload isolationを有効にして、検索ノードを構成します。 詳しくは、「検索ノードを追加する 」を参照してください。
専用の検索ノードを配置すると、次の一連のアクションが実行されます。
Atlas は検索ノードに検索インデックスを構築し、クラスター ノードからインデックスを削除します。
Atlas は検索クエリを検索ノードにルーティングします。
Atlas Search は、検索インデックスを使用して、Atlas クラスターでクエリを処理します。
配置のトラブルシューティング
Failed to Execute search Command
エラー
mongod
と並行して mongot
を実行し、検索ノードを構成しない場合、mongot
は次のいずれかのイベント中に終了し、Failed to Execute search Command
エラーを返す可能性があります。
クラスターのスケールアップ
ノード フェイルオーバー
アップグレード
mongot
mongot
を専用の検索ノードにデプロイすると、mongod
は検索クエリをmongot
プロセスがアクティブな正常なノードのみにルーティングするプロキシを使用します。