AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

フェデレーティッドデータベースインスタンスのクエリ

Atlas Data Federation のMongoDBクエリ言語(MQL)を使用して、データ ストアのデータをクエリおよび分析できます。Atlas Data Federation はほとんどの標準サーバー コマンドをサポートしていますが、すべての標準サーバーコマンドではありません。サポートされているMongoDBサーバーコマンドとサポートされていない MongoDB サーバーコマンドおよび集計パイプラインステージの詳細については、 「サポートされているMongoDBコマンド」 を参照してください。

データ ストア上のデータをクエリするには、フェデレーティッドデータベースインスタンスのストレージ構成に次の要素を定義する設定が含まれている必要があります。

  • フェデレーティッドデータベースインスタンス ストア。

  • フェデレーティッドデータベースインスタンス フェデレーティッドデータベースインスタンス ストアにマップされるフェデレーティッドデータベースインスタンス。

フェデレーティッドデータベースインスタンスのデータストアの ストレージ構成 は、Atlas UI Visual 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 は、埋め込みドキュメント等価クエリやドキュメント フィールドでのソートなど、フィールド順序を区別するクエリをサポートしていません。

フェデレーティッドデータベースインスタンスに対してクエリを実行するには、データベースユーザーは次のいずれかのロールを持っている必要があります。

フェデレーティッドデータベースインスタンスに対して最大 30 個のクエリを同時に実行できます。

  • Data in your S3 bucket or Azure Blob Storage container.

  • MongoDB Atlas クラスター内のドキュメント。

  • Atlas Online Archive にアーカイブされたデータ。

  • 一般にアクセス可能なURLでホストされているファイル内のデータ。

次のセクションには、データ ストア内のデータに対してクエリを実行する方法に関連する情報が含まれています。

When deploying your federated database instance, if you specified an S3 bucket with both read and write permissions or AWS S3 s3:PutObject permission, you can also save your query results in your S3 bucket using $out to S3.

If you successfully create or update an object on your S3 data store, Data Federation returns the latest version of that object for any subsequent read requests and all list operations of the objects also reflect the changes. If your query contains multiple stages, each stage receives the most recent data available from the data store as that stage is processed.

By default, Atlas Data Federation does not return documents in any specific order for queries on Data Federations for S3 data stores. Atlas Data Federation reads the partitions concurrently and the underlying storage response order determines which documents Atlas Data Federation returns first, unless you define order using $sort in your query. For example, if you run the same findOne() query twice, you could see different documents, and if you use $skip, different documents might be skipped if $sort is not used in the query.

クエリの結果を返すために 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 Data Federation$match がクエリの結果を返すにはコレクション全体を読み取る必要があります。

フェデレーティッドデータベースインスタンスを配置するときは、読み取りと書込みの両方の権限を持つ 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 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 Data Federation はクラスターをクエリするときに、フェデレーティッドデータベースインスタンスへの接続に使用したappNameに基づいてappNameを設定します。 たとえば、 appNameをmyAppに設定してフェデレーティッドデータベースインスタンスに接続すると(つまり appName = "myApp")では、クラスターに次の接続を実行するときに appName が設定されAtlas Data Federation 。

atlas-data-federation|myApp

Atlas コレクションの 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 Data Federation は Atlas Online Archive の作成時にフィールド上で作成したパーティションを使用します。データは最初のフィールドでクエリに合わせて最適化され、次に 2 番目のフィールドと続くため、パーティション内のフィールドの順序が重要です。オンライン アーカイブ を効果的にクエリするには、定義されているすべてのパーティション フィールドを定義された順序で使用します。定義された順序ですべてのパーティション フィールドを使用するクエリは、特定のパーティションを対象とし、スキャンするデータ量を最小限に抑えます。

Atlas Data Federation は、パーティションがないフィールドに対するクエリをサポートする際、パフォーマンスが低下します。

Data Federation は、コレクション内の各URLに対して 1 つのパーティションも作成します。 フェデレーティッドデータベースインスタンスに接続してクエリを実行すると、Data Federation はデータに対してクエリを処理し、クエリ結果を返します。

Atlas Data Federation を使用して、Atlas クラスター、 S3バケット、またはAzure Blob Storageコンテナ、 HTTP URL、オンライン アーカイブ内のデータの統合ビューをクエリおよび分析できます。フェデレーティッドクエリの場合、フェデレーティッドデータベースインスタンスのストレージ構成には、以下を定義する設定が含まれている必要があります。

  • S3 またはAzure、Atlas、Atlas Online アーカイブ、およびHTTPストア。

    注意

    Atlas Data Federation は、クラウドプロバイダー間のフェデレーティッドクエリをサポートしていません。そのため、 AWS S3 バケットとAzure Blob Storage コンテナに保存されているデータに対してフェデレーティッドクエリを実行することはできません。 Atlas クラスターをサポートしているクラウドプロバイダーに関係なく、Atlas クラスターとAWS S3バケットまたはAzure Blob ストレージコンテナのデータに対してフェデレーティッドクエリを同時に実行できます。

  • S3バケットまたはAzure Blog Storage、Atlas クラスター、Atlas クラスター、Atlas Online アーカイブ、 HTTPストアにマップされる仮想コレクションを持つフェデレーティッドデータベースインスタンス。

Atlas UIVisual Editor またはJSON Editor 、Atlas Data Federation CLI コマンド、および Atlas Data Federation API エンドポイントを使用して、フェデレーティッドデータベースインスタンスの ストレージ構成 を作成または更新できます。フェデレーティッドデータベースインスタンスのストレージ構成の詳細については、フェデレーティッドデータベースインスタンンス用のデータストアの構成を参照してください。

フェデレーティッドデータベースインスタンスに接続してフェデレーティッドクエリを実行すると、Data Federation は Atlas クラスター、 S3バケットまたはAzure Blob Storageコンテナ、および仮想データベースとコレクション内のHTTP URLのデータを組み合わせて、次のデータの和集合を返します。結果。

Atlas Data Federation が処理するクエリのデータ量を制限して、コストを管理できます。 Atlas Data Federation がクエリを処理するデータ量を制限するには、フェデレーティッドデータベースインスタンスごとに、またはプロジェクト内のすべてのフェデレーティッドデータベースインスタンスに対してクエリ制限を構成できます。データの処理量が設定した該当制限値に達すると、Atlas Data Federation は新しいクエリを実行せず、制限に達したというエラーをクライアントアプリケーションに返します。詳細については、「 Atlas Data Federation データ処理クエリ制限の管理 」を参照してください。

エラー:現在、Atlas Data Federation のクエリ処理の待機時間が増加しています。 エンジニアリング チームが調査しています。 通常のサービスはすぐに再開されます。もう一度お試しください。

Atlas Data Federation は、 リソースの競合 により Atlas Data Federation がクエリを実行できない場合にのみこのエラーを返します。 クエリを再度実行することをお勧めします。