Atlas Data Federation は、Atlas クラスターをフェデレーティッドデータベースインスタンス ストアとしてサポートします。 データに対してクエリを実行するには、フェデレーティッドデータベースインスタンスで Atlas クラスターへのマッピングを定義する必要があります。
重要
ストレージ構成内の情報は MongoDB の内部で表示され、Atlas Data Federation のパフォーマンスを監視して改善するための運用データとして保存されます。 したがって、構成では PIIを使用しないことをお勧めします。
Atlas データストアの構成例
例
metrics.hardwareコレクションにデータを含む、 myDataCenterという名前の M10以上の Atlas クラスターを検討します。 metrics.hardwareコレクションには、データセンターのハードウェアから派生したメトリクスを含む JSON ドキュメントが含まれています。 以下は次のように構成されます。
指定されたプロジェクト内の
myDataCenterという名前の Atlas クラスターをフェデレーティッドデータベースインスタンス ストアとして指定します。Atlas クラスター内の
metrics.hardwareコレクションのドキュメントを、 ストレージ構成内のdataCenter.inventoryコレクションにマッピングします。
{ "stores" : [ { "name" : "atlasClusterStore", "provider" : "atlas", "clusterName" : "myDataCenter", "projectId" : "5e2211c17a3e5a48f5497de3" } ], "databases" : [ { "name" : "dataCenter", "collections" : [ { "name" : "inventory", "dataSources" : [ { "storeName" : "atlasClusterStore", "database" : "metrics", "collection" : "hardware" } ] } ] } ] }
Atlas Data Federation は、 metrics.hardwareコレクション内のすべてのドキュメントをストレージ構成のdataCenter.inventoryコレクションにマッピングします。
フェデレーティッドデータベースインスタンスに接続したユーザーは、MongoDB クエリ言語とサポートされている集計を使用し、 dataCenter.inventoryコレクションを通して Atlas クラスター内のデータを分析できます。 クエリを実行すると、クエリはまず Atlas Data Federation に送信されます。 そのため、Atlas クラスターでサポートされているが Atlas Data Federation ではサポートされていない集計クエリを実行すると、クエリは失敗します。 Data Federation でサポートされているコマンドとサポートされていないコマンドの詳細については、 サポートされている MongoDB コマンド を参照してください。
構成フォーマット
フェデレーティッドデータベースインスタンス構成の形式は次のとおりです。
1 { 2 "stores" : [ 3 { 4 "name" : "<string>", 5 "provider": "<string>", 6 "clusterName": "<string>", 7 "projectId": "<string>", 8 "readPreference": { 9 "mode": "<string>", 10 "tagSets": [ 11 [{"name": "<string>", "value": "<string>"},...], 12 ... 13 ], 14 "maxStalenessSeconds": <int> 15 } 16 } 17 ], 18 "databases" : [ 19 { 20 "name" : "<string>", 21 "collections" : [ 22 { 23 "name" : "<string>", 24 "dataSources" : [ 25 { 26 "storeName" : "<string>", 27 "database" : "<string>", 28 "databaseRegex": "<string>", 29 "collection" : "<string>", 30 "collectionRegex" : "<string>", 31 "provenanceFieldName": "<string>" 32 } 33 ] 34 } 35 ], 36 "views" : [ 37 { 38 "name" : "<string>", 39 "source" : "<string>", 40 "pipeline" : "<string>" 41 } 42 ] 43 } 44 ] 45 }
storesstoresオブジェクトは、フェデレーティッドデータベースインスタンスに関連付けられた各データ ストアを定義します。 フェデレーティッドデータベースインスタンス ストアは、Atlas クラスター内のドキュメント内のファイルをキャプチャします。 フェデレーティッドデータベースインスタンスは、storesオブジェクトで定義されたデータ ストアにのみアクセスできます。databasesdatabasesオブジェクトは、storesで定義された各フェデレーティッドデータベースインスタンス ストアとデータベース内の MongoDB コレクションの間のマッピングを定義します。
stores
1 "stores" : [ 2 { 3 "name" : "<string>", 4 "provider" : "<string>", 5 "clusterName" : "<string>", 6 "projectId": "<string>" 7 "readPreference": { 8 "mode": "<string>", 9 "tagSets": [ 10 [{"name": "<string>", "value": "<string>"},...], 11 ... 12 ], 13 "maxStalenessSeconds": <int> 14 }, 15 "readConcern": { 16 "level": "<string>" 17 } 18 } 19 ]
stores各オブジェクトがフェデレーティッドデータベースインスタンスに関連付けるデータ ストアを表すオブジェクトの配列。フェデレーティッドデータベースインスタンス ストアは、S3 バケット内のファイル、Atlas クラスター内のドキュメント、または一般にアクセス可能な URL に保存されているファイルを取得します。Atlas Data Federation は、
storesオブジェクトで定義されたデータ ストアにのみアクセスできます。
stores.[n].nameフェデレーティッドデータベースインスタンス ストアの名前。
databases.[n].collections.[n].dataSources.[n].storeNameフィールドは、マッピング構成の一部としてこの値を参照します。
stores.[n].clusterNameストアの基となる Atlas クラスターの名前。 クラスターはフェデレーティッドデータベースインスタンスと同じプロジェクト内に存在する必要があります。 データパーティションの
sourceフィールドは、Atlas クラスターの名前です。
stores.[n].readPreference任意。 クラスターの読み込み設定 ( read preference ) では、読み取りリクエストをクラスターにルーティングする方法について説明します。
例
次の
readPreference設定では、secondaryモードとANALYTICSNodeType を指定します。{ ... "stores": [ { "provider": "atlas", "clusterName": <CLUSTER_NAME>, "name": <STORE_NAME>, "projectId": <PROJECT_ID>, "readPreference": { "mode": "secondary", "tagSets": [ [ { "name": "nodeType", "value": "ANALYTICS" } ], ... ] } } ] }
stores.[n].readPreference.mode任意。 読み取りリクエストをルーティングするレプリカセット メンバーを指定する 読み込み設定 ( read preference) モード 値は次のいずれかになります。
primary- すべての読み取りリクエストをレプリカセットのプライマリにルーティングしますprimaryPreferred-primaryが使用できない場合にのみ、すべての読み取りリクエストをレプリカセットのプライマリとセカンダリノードにルーティングしますsecondary- すべての読み取りリクエストをレプリカセットのセカンダリノードにルーティングしますsecondaryPreferred-secondaryノードが使用できない場合にのみ、すべての読み取りリクエストをレプリカセットのセカンダリノードとシャーディングされたクラスター上のプライマリにルーティングしますnearest- メンバーがプライマリであるか、セカンダリであるかに関係なく、すべての読み取りリクエストを、ランダムに選択された適格なレプリカセット メンバーにルーティングします。
省略した場合、デフォルトは
localになります。
stores.[n].readPreference.tagSets任意。 レプリカセットの名前と値のペアを含む、タグセットまたはタグ仕様ドキュメントの配列。 指定すると、Atlas Data Federation は読み取りリクエストを、指定されたタグに関連付けられているレプリカセット ノードまたはノードにルーティングします。 詳しくは、「読み込み設定(read preference)タグセット 」を参照してください。
注意
Atlas Data Federation は、シャーディングされたクラスターの
tagSetsをサポートしていません。
stores.[n].readPreference.maxStalenessSeconds任意。 セカンダリからの読み取りの最大レプリケーションラグ、または「古い」
maxStalenessSecondsの詳細については、「読み込み設定(read preference) maxStalenessSeconds 」を参照してください。
stores.[n].readConcern任意。 Atlas クラスターから読み取られたデータの整合性と分離プロパティ。 詳しくは、「読み取り保証」を参照してください。 整合性と可用性のレベルの値は次のいずれかになります。
local- インスタンスからデータを返しますが、レプリカセットのノードの大半にデータが書き込まれたことを保証しません。 詳しくは、「読み取り保証(read concern)"local」 を参照してください。available- インスタンスからデータを返しますが、レプリカセットのノードの大半にデータが書き込まれたことを保証しません。 これにより、シャーディングされたコレクションから読み取るときに孤立したドキュメントが返される可能性があります。 詳しくは、「読み取り保証(read concern)が"利用可能" 」を参照してください。majority- Atlas クラスター上のノードの過半数が承認したデータを返すには、 詳しくは、「読み取り保証(read concern)"majority」 を参照してください。linearizable- 読み取り操作の開始前に完了した、過半数が承認した成功した書き込みをすべて反映したデータを返します。 詳細については、「読み取り保証(read concern)" 線形化可能" 」を参照してください。snapshot- 直近の特定の点のシャード全体に表示れる、過半数のコミット済みデータを返します。 詳しくは、「読み取り保証(read concern)の「スナップショット」 を参照してください。
databases
1 "databases" : [ 2 { 3 "name" : "<string>", 4 "collections" : [ 5 { 6 "name" : "<string>", 7 "dataSources" : [ 8 { 9 "storeName" : "<string>", 10 "database" : "<string>", 11 "databaseRegex": "<string>", 12 "collection" : "<string>", 13 "collectionRegex" : "<string>", 14 "provenanceFieldName": "<string>" 15 } 16 ] 17 } 18 ] 19 } 20 ]
databases各オブジェクトがデータベース、そのコレクション、および任意でコレクション上のビューを表すオブジェクトの配列。各データベースには複数の
collectionsおよびviewsオブジェクトを保持できます。
databases.[n].nameAtlas Data Federation がデータ ストアに含まれるデータをマッピングするデータベースの名前。 データベース名に
*を指定することで、データベースを動的に生成できます。 動的に生成されたデータベース:明示的に定義されたデータベースと並行して存在できます。 ただし、Atlas Data Federation は、ストレージ構成で明示的に定義されたデータベースと競合する名前を持つデータベースを動的に生成することはありません。
単一の Atlas クラスターからのみ可能です。 Atlas Data Federation は、複数の Atlas クラスターやその他のデータ ストアからデータベースを動的に生成しません。
databases.[n].collections各オブジェクトが
storesフェデレーティッドデータベースインスタンス ストアにマッピングするコレクションとデータソースを表すオブジェクトの配列。 動的に生成されたデータベースの場合、ストレージ構成で定義できるワイルドカード(*)のコレクション オブジェクトは 1 つだけです。
databases.[n].collections.[n].nameAtlas Data Federation が各
databases.[n].collections.[n].dataSources.[n].storeNameに含まれるデータをマッピングするコレクションの名前。配列内の各オブジェクトは、コレクションとstores配列内のオブジェクトとの間のマッピングを表します。コレクション名に
*を指定し、collectionフィールドを省略することで、コレクション名を動的に生成できます。 動的に生成されたワイルドカード(*)データベース用にワイルドカード(*)のコレクションを動的に生成するには、databases.[n].collections.[n].dataSources.[n].storeNameオプションを指定し、databases.[n].collections.[n].dataSources.[n].databaseオプションを省略します。 動的に生成されたデータベースの場合、ストレージ構成で定義できるワイルドカード(*)のコレクション オブジェクトは 1 つだけであることに注意してください。ワイルドカード(
*)コレクションの場合、コレクションのみをフィルタリングするために、databases.[n].collections.[n].dataSources.[n].collectionRegexフィールドを使用して正規表現パターンを定義することもできます。
databases.[n].collections.[n].dataSources各オブジェクトがコレクションにマッピングする
storesフェデレーティッドデータベースインスタンス ストアを表すオブジェクトの配列。
databases.[n].collections.[n].dataSources.[n].storeName<collection>にマッピングするフェデレーティッドデータベースインスタンス ストアの名前。stores配列内のオブジェクトのnameと一致する必要があります。
databases.[n].collections.[n].dataSources.[n].databaseコレクションを含む Atlas クラスター上のデータベースの名前。 次の場合には、この設定を省略する必要があります。
ワイルドカード(
*)データベース用のワイルドカード(*)コレクションを作成します。複数のデータベースをグローバル化します。
databases.[n].collections.[n].dataSources.[n].databaseRegex任意。 データベースが複数のコレクションを結合するようグローバル化するために使用する正規表現パターン。 このオプションを指定すると、フェデレーティッドデータベースインスタンスには、複数のデータベースからのコレクションを持つ単一のデータベースが含まれます。 データベースをグローバル化する場合は、次の操作を行う必要があります。
databaseフィールドを省略します。databases.[n].collections.[n].dataSources.[n].collectionフィールドに有効な名前を指定します。
例
たとえば、
fooとbarという名前の 2 つのデータベースがあり、それぞれにSalesという名前のコレクションがあるとします。 ストレージ構成でdatabaseRegexオプションを使用して、fooとbarのSalesコレクションを組み合わせることができます。{ "databases": [ { "name": "Transactions", "collections": [ { "name": "AllSales", "dataSources": [ { "storeName": "atlasStore", "databaseRegex": ".*", "collection": "Sales" } ] } ] } ] } 前述の
databasesオブジェクトに対して、Atlas Data Federation はフェデレーティッドデータベースインスタンスに次のものを生成します。Transactionsという名前の仮想データベース。という名前の仮想コレクションには、
databaseRegexオプションで指定された正規表現パターンと一致する名前を持つすべてのデータベースに含まれるSalesAllSales名前のコレクションのデータが含まれています。
このオプションを指定する場合は、コレクションの名前を指定する必要があります。 ワイルドカード コレクションでは、このオプションは指定できません。
databases.[n].collections.[n].dataSources.[n].collectionフェデレーティッドデータベースインスタンス ストアの基となる Atlas クラスター内のコレクションの名前。 次の場合は、この設定を省略する必要があります。
ワイルドカード(
*)コレクションの作成。正規表現パターンに一致するワイルドカード コレクション名の作成
正規表現パターンを使用して、データベース内の複数のコレクションを結合します。
databases.[n].collections.[n].dataSources.[n].collectionRegex条件: ワイルドカード コレクションの場合は任意。 データベース 内のコレクションを結合するために必要です。
ワイルドカード(
*)コレクションの作成、またはデータベース内の複数のコレクションの結合に使用する正規表現パターン。ワイルドカード(``*``) コレクション名 に正規表現パターンを使用するには、次の操作を行う必要があります。
databases.[n].collections.[n].nameの値としてワイルドカード(*)を指定します。Omit
databases.[n].collections.[n].dataSources.[n].collection.
ワイルドカード コレクションの生成のためにこのフィールドを指定すると、フェデレーティッドデータベースインスタンスには、指定された正規表現と一致する名前を持つコレクションのみが含まれます。 フェデレーティッドデータベースインスタンス ストレージ構成内のコレクションは、Atlas クラスター内の元の名前を使用します。
データベース 内の複数のコレクションを結合するために正規表現パターンを使用するには、次の操作を行う必要があります。
databases.[n].collections.[n].nameの値としてワイルドカード以外の名前(*)を指定します。Omit
databases.[n].collections.[n].dataSources.[n].collection.
複数のコレクションを結合するためにこのフィールドを指定する場合、フェデレーティッドデータベースインスタンスのコレクションには、指定された正規表現と一致する名前を持つすべての Atlas コレクションのデータが含まれます。 フェデレーティッドデータベースインスタンス ストレージ構成のコレクションは、
databases.[n].collections.[n].nameの値として指定した名前を使用します。正規表現構文の詳細については、 Goプログラミング言語 を参照してください。
databases.[n].collections.[n].dataSources.[n].provenanceFieldName結果にドキュメントの出所が含まれるフィールドの名前。ストレージ構成でこの設定を指定すると、Atlas Data Federation は結果の各ドキュメントに対して次のフィールドを返します。
フィールド名説明providerフェデレーティッドデータベースインスタンスストレージ構成のプロバイダー(
stores.[n].provider)clusterNameAtlas クラスターの名前(
stores.[n].clusterName)databaseNameAtlas
databases.[n].collections.[n].dataSources.[n].databaseクラスター内のデータベースの名前( )collectionNameコレクションの名前(
databases.[n].collections.[n].name)Atlas UI のビジュアル エディターを使用してこの設定を構成することはできません。
databases.[n].views.[n].sourceビューのソースコレクションの名前。$sql ステージでビューを作成する場合は、 SQLステートメントでソースコレクションが指定されるため、このフィールドを省略する必要があります。
databases.[n].views.[n].pipelineコレクションに適用する
source集計パイプラインラインステージ 。$sql ステージを使用してビューを作成することもできます。