Atlas Data Federation のMongoDBクエリ言語(MQL)を使用して、データ ストアのデータをクエリおよび分析できます。Atlas Data Federation はほとんどの標準サーバー コマンドをサポートしていますが、すべての標準サーバーコマンドではありません。サポートされているMongoDBサーバーコマンドとサポートされていない MongoDB サーバーコマンドおよび集計パイプラインステージの詳細については、 「サポートされているMongoDBコマンド」 を参照してください。
1 つのフェデレーティッドクエリで複数のソースのデータを組み合わせることができます。ただし、Atlas Data Federation は、クラウドプロバイダー間のフェデレーティッドクエリをサポートしていません。そのため、同じフェデレーティッドクエリにAWS S3 バケットとAzure Blob Storageコンテナの両方を含めることはできません。
データ ストア上のデータをクエリするには、フェデレーティッドデータベースインスタンスのストレージ構成に次の要素を定義する設定が含まれている必要があります。
フェデレーティッドデータベースインスタンス ストア。
フェデレーティッドデータベースインスタンス フェデレーティッドデータベースインスタンス ストアにマップされるフェデレーティッドデータベースインスタンス。
Atlas UIVisual Editor またはJSON Editor 、Atlas Data Federation CLI コマンド、Atlas Data Federation API エンドポイントを使用して、データストアのフェデレーティッドデータベースインスタンス ストレージ構成 を作成または更新できます。フェデレーティッドデータベースインスタンスのストレージ構成の詳細については、フェデレーティッドデータベースインスタンスの保存の構成を参照してください。
Atlas Data Federation は、データ ストア内のデータに対してフェデレーティッドデータベースインスタンス構成で指定した仮想データベースとコレクションを作成します。 フェデレーティッドデータベースインスタンスに接続してクエリ を実行すると、Atlas Data Federation はデータに対してクエリを処理し、クエリ結果を返します。 オプションで、クエリの Atlas Data Federation が処理するデータ量に制限を設定して、コストを管理できます。
注意
Atlas Data Federation は、ドキュメント内のフィールドの順序を保持しない列指向ストレージを使用します。 したがって、Atlas Data Federation は、埋め込みドキュメント等価クエリやドキュメント フィールドでのソートなど、フィールド順序を区別するクエリをサポートしていません。
フェデレーティッドデータベースインスタンスに対してクエリを実行するには、データベースユーザーは次のいずれかのロールを持っている必要があります。
1 つのフェデレーティッドクエリでさまざまなソースタイプを組み合わせることができます。ただし、 AWS S3 バケットとAzure Blob Storageコンテナ の両方を含めることはできません。以下はサポートされているソースタイプですが、これらのすべての組み合わせをクエリすることはできません。フェデレーティッドデータベースインスタンスでは、次に対して最大 の同時クエリを実行できます。30
あなたの S3 バケットまたは Azure Blob ストレージ コンテナのデータ。
MongoDB Atlas クラスター内のドキュメント。
Atlas Online Archive にアーカイブされたデータ。
一般にアクセス可能なURLでホストされているファイル内のデータ。
30 クエリ制限は同時実行制限です。 1 つのクエリで複数のクラウドプロバイダーのオブジェクトストレージを組み合わせることはできません。
以下のセクションでは、保存 (する)内のデータに対してクエリを実行する方法について説明します。
S3 でのデータのクエリ
フェデレーティッドデータベースインスタンスを 配置する 際、読み取りと書き込み (write)の両方の権限を持つ S3 バケット、または AWS S3 3s:PutObject 権限を指定した場合、 $out to S3 を使用してクエリ結果を S3 バケットに保存することもできます。
ユーザーの S3 データ保存 (する)上でオブジェクトの作成または更新が成功した場合、Data Federation はその後のすべての読み取りリクエストに対してそのオブジェクトの最新バージョンを返します。また、オブジェクトのすべてのリスト操作にも変更が反映されます。クエリに複数のステージが含まれる場合、各ステージは、処理時にデータ保存 (する)から利用可能な最新のデータを受け取ります。
デフォルトでは、Atlas Data Federation は、S3 データストアの Data Federation に対するクエリについて、特定の順序でドキュメントを返しません。Atlas Data Federation はパーティションを同時に読み取り込みます。そして、クエリで $sort を使用して順序を定義しない限り、基礎のストレージの応答順序によって、Atlas Data Federation がどのドキュメントを先に返すかが決まります。例えば、同じ findOne() クエリを 2 回実行すると、異なるドキュメントが表示される可能性があります。また、$skip を使用する場合、クエリで $sort が使用されていない場合、異なるドキュメントがスキップされる可能性があります。
クエリの結果を返すために Atlas Data Federation が処理するデータ量には「Data Processed」コストが発生し、Atlas Data Federation が返すデータ量は「Data Returned」コストが発生します。 たとえば、10 GB のファイルの場合、「返されたデータ」コストに加えて、次の「データ処理」コストが発生します。
パーティションがない場合、Atlas Data Federation はファイル全体を読み取りて、クエリの結果を返します。 したがって、10 GB の「Data Processed」コストが発生します。
それぞれ 1 GB のパーティションが 10 個ある場合、Atlas Data Federation は 1 つのパーティションをターゲットにして読み取りを行います。 したがって、1 GB の「Data Processed」コストが発生します。
フェデレーティッドデータベースインスタンスごと、およびプロジェクト内のすべてのフェデレーティッドデータベースインスタンンスに対してクエリ制限を設定し、処理されたデータの量を制限することができます。詳細については、「Atlas Data Federation データ プロセシング クエリ制限の管理」を参照してください。
注意
データをパーティショニングしても、データ処理コストの削減は保証されません。 たとえば、すべてのデータをクエリする空の$matchクエリを実行した場合、パーティションの数に関係なく、Atlas Data Federation はコレクション全体を読み取る必要があります。
Azure BLOB ストレージでのデータのクエリ
フェデレーティッドデータベースインスタンスを配置するときは、読み取りと書込みの両方の権限を持つ Azure Blog ストレージ コンテナを指定できます。
クエリの結果を返すために Atlas Data Federation が処理するデータ量には「Data Processed」コストが発生し、Atlas Data Federation が返すデータ量は「Data Returned」コストが発生します。 たとえば、10 GB のファイルの場合、「返されたデータ」コストに加えて、次の「データ処理」コストが発生します。
パーティションがない場合、Atlas Data Federation はファイル全体を読み取りて、クエリの結果を返します。 したがって、10 GB の「Data Processed」コストが発生します。
それぞれ 1 GB のパーティションが 10 個ある場合、Atlas Data Federation は 1 つのパーティションをターゲットにして読み取りを行います。 したがって、1 GB の「Data Processed」コストが発生します。
フェデレーティッドデータベースインスタンスごと、およびプロジェクト内のすべてのフェデレーティッドデータベースインスタンンスに対してクエリ制限を設定し、処理されたデータの量を制限することができます。詳細については、「Atlas Data Federation データ プロセシング クエリ制限の管理」を参照してください。
Google Cloud PlatformストレージでのデータのクエリGoogle Cloud Platform
フェデレーティッドデータベースインスタンスを配置するときに、読み取り権限と書込み権限の両方を持つGoogle CloudGoogle Cloud Platform Platform Storageバケットを指定できます。
クエリの結果を返すために Atlas Data Federation が処理するデータ量には「Data Processed」コストが発生し、Atlas Data Federation が返すデータ量は「Data Returned」コストが発生します。 たとえば、10 GB のファイルの場合、「返されたデータ」コストに加えて、次の「データ処理」コストが発生します。
パーティションがない場合、Atlas Data Federation はファイル全体を読み取りて、クエリの結果を返します。 したがって、10 GB の「Data Processed」コストが発生します。
それぞれ 1 GB のパーティションが 10 個ある場合、Atlas Data Federation は 1 つのパーティションをターゲットにして読み取りを行います。 したがって、1 GB の「Data Processed」コストが発生します。
フェデレーティッドデータベースインスタンスごと、およびプロジェクト内のすべてのフェデレーティッドデータベースインスタンンスに対してクエリ制限を設定し、処理されたデータの量を制限することができます。詳細については、「Atlas Data Federation データ プロセシング クエリ制限の管理」を参照してください。
Atlas クラスターでのデータのクエリ
フェデレーティッドデータベースインスタンスを介して Atlas クラスターに対してクエリを実行すると、Atlas Data Federation はクラスターをクエリするときに、フェデレーティッドデータベースインスタンスへの接続に使用したappNameに基づいてappNameを設定します。 たとえば、 appNameをmyAppに設定してフェデレーティッドデータベースインスタンスに接続すると(つまり appName = "myApp")では、クラスターに次の接続を実行するときに appName が設定されAtlas Data Federation 。
atlas-data-federation|myAppAtlas コレクションの 1 つだけにマップされている Atlas Data Federation 内のコレクションをクエリすると、Atlas Data Federation はプロキシとして機能し、クエリを Atlas に転送します。 When acting as a proxy, Atlas Data Federation doesn't scan data into its virtual collection to process the query thus improving performance and reducing cost. この最適化は、複数の Atlas コレクションにマップされている Atlas Data Federation コレクションに対するクエリでは 使用できません 。
例
次のフェデレーティッドデータベースインスタンス・ストレージの構成を検討してください。
{ "stores" : [ { "name" : "atlas-store", "provider": "atlas", "clusterName": "myCluster", "projectId": "5e2211c17a3e5a48f5497de3" } ], "databases" : [ { "name" : "atlas-db", "collections" : [ { "name" : "foo", "dataSources" : [ { "storeName" : "atlas-store", "database" : "myFooData", "collection" : "foo" } ] }, { "name" : "barbaz", "dataSources" : [ { "storeName" : "atlas-store", "database" : "myBarData", "collection" : "bar" }, { "storeName" : "atlas-store", "database" : "myBazData", "collection" : "baz" } ] } ] } ]}上記のストレージ構成では、Atlas Data Federation はfooコレクションに対するクエリのプロキシとして機能し、クエリを Atlas に転送します。 このパフォーマンスとコストの最適化は、 barbazが複数の Atlas コレクションにマッピングされているため、 barbazコレクションのクエリでは使用できません。
Atlas への $out を使用して、Atlas クラスターにクエリ結果を保存することもできます。
Atlas クラスター上のコレクション内のドキュメントを正常に作成または更新すると、Data Federation は後続の読み取りリクエストとコレクションのすべてのリスト操作に対してそのドキュメントの最新バージョンを返し、変更を反映します。 クエリに複数のステージが含まれている場合、各ステージは、そのステージが処理されるにつれてデータ ストアから利用可能な最新データを受け取ります。
Atlas は、クラスター データに対するクエリを Atlas クラスター監査ログ に記録します。 データベースユーザーのログエントリの形式は次のとおりです。
<SERVICE_NAME>-<ATLAS_DATA_FEDERATION_INSTANCE_NAME>-<DATABASE_USER_NAME>たとえば、Atlas で"user" : "CN=atlasDataFederation-DataFederation0-test_datafederation0"として構成されているデータベースユーザーの場合、Atlas クラスター監査ログのログエントリは次のようになります。
{ "atype" : "authenticate", "ts" : { "$date" : "2022-04-29T13:17:54.020+00:00" }, "local" : { "ip" : "XXXX", "port" : 27017 }, "remote" : { "ip" : "XXXXX", "port" : 10844 }, "users" : [ { "user" : "CN=atlasDataFederation-DataFederation0-test_datafederation0", "db" : "$external" } ], "roles" : [ { "role" : "backup", "db" : "admin" }, { "role" : "readWriteAnyDatabase", "db" : "admin" }, { "role" : "clusterMonitor", "db" : "admin" }, { "role" : "enableSharding", "db" : "admin" }, { "role" : "atlasAdmin", "db" : "admin" }, { "role" : "dbAdminAnyDatabase", "db" : "admin" } ], "param" : { "user" : "CN=atlasDataFederation-DataFederation0-test_datafederation0", "db" : "$external", "mechanism" : "MONGODB-X509" }, "result" : 0}注意
Atlas クラスター監査ログでは、接続メカニズムは常にMONGODB-X509です。
Atlas Online Archive でのデータのクエリ
クエリの場合、Atlas Data Federation は Atlas Online Archive の作成時にフィールド上で作成したパーティションを使用します。データは最初のフィールドでクエリに合わせて最適化され、次に 2 番目のフィールドと続くため、パーティション内のフィールドの順序が重要です。オンライン アーカイブ を効果的にクエリするには、定義されているすべてのパーティション フィールドを定義された順序で使用します。定義された順序ですべてのパーティション フィールドを使用するクエリは、特定のパーティションを対象とし、スキャンするデータ量を最小限に抑えます。
Atlas Data Federation は、パーティションがないフィールドに対するクエリをサポートする際、パフォーマンスが低下します。
HTTP または HTTPS URL でのデータのクエリ
Data Federation は、コレクション内の各URLに対して 1 つのパーティションも作成します。 フェデレーティッドデータベースインスタンスに接続してクエリを実行すると、Data Federation はデータに対してクエリを処理し、クエリ結果を返します。
フェデレーティッドクエリの実行
Atlas Data Federation を使用すると、Atlas クラスターのデータとオンラインアーカイブ、HTTP または HTTPS データを組み合わせた統合ビューをクエリできます。クエリには、Amazon Web Services S3 バケットまたは Azure Blob ストレージ コンテナを含めることもできます。フェデレーティッドクエリの場合、フェデレーティッドデータベースインスタンスのストレージ 構成 には、以下を定義する設定が含まれている必要があります。
Atlas、オンラインアーカイブ、HTTP ストア、および Amazon Web Services S3 バケットまたは Azure Blob ストレージ コンテナ。
注意
Atlas Data Federation は、クラウドプロバイダー間でのフェデレーティッドクエリをサポートしていません。したがって、AWS S3 バケットおよび Azure Blob ストレージ コンテナに保存されているデータに対して、フェデレーティッドクエリを実行できません。Atlas クラスターをバックアップするクラウドプロバイダーにかかわらず、Atlas クラスターのデータと AWS S3 バケットまたは Azure Blob ストレージ コンテナのデータに対して、フェデレーティッドクエリを同時に実行できます。
フェデレーティッドデータベースインスタンスは、S3 バケットまたは Azure Blob Storage、Atlas クラスター、オンラインアーカイブ、および HTTP ストレージにマッピングする仮想コレクションを持つ。
フェデレーティッドデータベースインスタンスのストレージ構成を作成または更新するには、Atlas UIVisual Editor またはJSON Editor 、Atlas Data Federation CLI コマンド、Atlas Data Federation API エンドポイントとなる接続されたデバイスを使用します。フェデレーティッドデータベースインスタンスのストレージ構成の詳細については、フェデレーティッドデータベースインスタンスの保存の構成を参照してください。
フェデレーティッドデータベースインスタンスに接続してフェデレーティッドクエリを実行すると、Data Federationはすべてのソースからのデータを結合します。これらのソースは、Atlasクラスター、HTTPまたはHTTPSデータ、そしてS3バケットまたはAzure Blob ストレージコンテナのいずれかです。Data Federationは集計されたデータを仮想データベースとコレクションに保存し、結果としてデータの和集合を返します。
クエリ制限の構成
Atlas Data Federation がクエリのために処理するデータ量を制限して、コストを管理できます。Atlas Data Federation がクエリに対して処理するデータ量を制限するには、フェデレーティッドデータベースインスタンスごとにクエリ制限を構成するか、プロジェクト内のすべてのフェデレーティッドデータベースインスタンスに対してクエリ制限を構成できます。データの処理量が設定した該当制限値に達すると、Atlas Data Federation は新しいクエリを実行せず、制限に達したというエラーをクライアント アプリケーションに返します。詳細については、「Atlas Data Federation データ プロセシング クエリ制限の管理」を参照してください。
トラブルシューティング
エラー:現在、Atlas Data Federation のクエリ処理の待機時間が増加しています。 エンジニアリング チームが調査しています。 通常のサービスはすぐに再開されます。もう一度お試しください。
Atlas Data Federation は、 リソースの競合 により Atlas Data Federation がクエリを実行できない場合にのみこのエラーを返します。 クエリを再度実行することをお勧めします。