Atlas Cluster
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 }
stores
stores
オブジェクトは、フェデレーティッドデータベースインスタンスに関連付けられた各データ ストアを定義します。 フェデレーティッドデータベースインスタンス ストアは、Atlas クラスター内のドキュメント内のファイルをキャプチャします。 フェデレーティッドデータベースインスタンスは、stores
オブジェクトで定義されたデータ ストアにのみアクセスできます。databases
databases
オブジェクトは、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
モードとANALYTICS
NodeType を指定します。{ ... "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].name
Atlas Data Federation がデータ ストアに含まれるデータをマッピングするデータベースの名前。 データベース名に
*
を指定することで、データベースを動的に生成できます。 動的に生成されたデータベース:明示的に定義されたデータベースと並行して存在できます。 ただし、Atlas Data Federation は、ストレージ構成で明示的に定義されたデータベースと競合する名前を持つデータベースを動的に生成することはありません。
単一の Atlas クラスターからのみ可能です。 Atlas Data Federation は、複数の Atlas クラスターやその他のデータ ストアからデータベースを動的に生成しません。
databases.[n].collections
各オブジェクトが
stores
フェデレーティッドデータベースインスタンス ストアにマッピングするコレクションとデータソースを表すオブジェクトの配列。 動的に生成されたデータベースの場合、ストレージ構成で定義できるワイルドカード(*
)のコレクション オブジェクトは 1 つだけです。
databases.[n].collections.[n].name
Atlas 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
オプションで指定された正規表現パターンと一致する名前を持つすべてのデータベースに含まれるSales
AllSales
名前のコレクションのデータが含まれています。
このオプションを指定する場合は、コレクションの名前を指定する必要があります。 ワイルドカード コレクションでは、このオプションは指定できません。
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
)clusterName
Atlas クラスターの名前(stores.[n].clusterName
)databaseName
Atlas クラスター内のデータベースの名前(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
ステージを使用してビューを作成することもできます。