Atlas Cluster
Atlas Data Federation 支持 Atlas 集群作为联合数据库实例存储。 您必须在联合数据库实例中定义到 Atlas 集群的映射,才能运行数据查询。
重要
存储配置中的信息在 MongoDB 内部可见,并存储为操作数据,以监控和提高 Atlas Data Federation 的性能。 因此,我们建议您不要在配置中使用 PII 。
Atlas Data Store 的配置示例
例子
考虑一个名为M10
的Atlas 集群或更高级别的 AtlasmyDataCenter
metrics.hardware
集群,其中包含collection集合中的数据。metrics.hardware
collection 包含 JSON 文档,其中的指标源自数据中心的 硬件。配置如下:
将指定项目中名为
myDataCenter
的 Atlas 集群指定为联合数据库实例存储。将文档从 Atlas 集群中的
metrics.hardware
collection映射到存储配置中的dataCenter.inventory
collection。
{ "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].readPreference
可选。 集群读取偏好(read preference),描述如何将读取请求路由到集群。
stores.[n].readPreference.mode
可选。 读取偏好模式,用于指定将读取请求路由到哪个副本集成员。 值可以是以下之一:
primary
— 将所有读取请求路由到副本集主节点 (primary node in the replica set)primaryPreferred
- 仅当primary
不可用时,将所有读取请求路由到副本集主节点 (primary node in the replica set)和从从节点(secondary node from replica set)成员secondary
- 将所有读取请求路由到副本集的从节点secondaryPreferred
- 仅当 成员不可用时,将所有读取请求路由到副本集的从 主节点 (primary node in the replica set) 和分片集群上的 从节点(secondary node from replica set) 分片的secondary
nearest
- 将所有读取请求路由到符合条件的随机副本集成员,无论该成员是主节点 (primary node in the replica set)还是从从节点(secondary node from replica set)
如果省略,则默认值为
local
。
stores.[n].readPreference.tagSets
可选。 包含副本集节点的名称和值对的标签集或标签规范文档的数组。 如果指定,Atlas Data Federation 会将读取请求路由到一个或多个与指定标签关联的副本集节点。 要了解更多信息,请阅读偏好标签集。
注意
Atlas Data Federation 不支持分片集群的
tagSets
。
stores.[n].readPreference.maxStalenessSeconds
可选。 从节点读取的最大复制延迟或“陈旧度”。 要学习;了解有关
maxStalenessSeconds
的更多信息,请参阅读取偏好 maxStalenessSeconds。
stores.[n].readConcern
可选。 从 Atlas 集群读取的数据的一致性和隔离性。 要了解更多信息,请参阅读关注。 一致性和可用性级别的值可以是以下值之一:
local
— 从实例返回数据,但不保证数据已写入大多数副本集成员。 要了解更多信息,请参阅读关注“local”。available
— 从实例返回数据,但不保证数据已写入大多数副本集成员。 从分片的集合读取时,这可能会返回孤立文档。 要学习;了解更多信息,请参阅读关注“available”。majority
— 返回已得到Atlas 集群大多数节点确认的数据。 要学习;了解更多信息,请参阅读关注“majority”。linearizable
— 返回反映在读操作开始之前完成的所有成功的多数已确认写操作的数据。 要了解更多信息,请参阅关注 "linearizable"。snapshot
— 返回最近某一特定时间点跨分片出现的多数提交数据。 要学习;了解更多信息,请参阅读关注“快照”。
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
联合数据库实例存储的数据源。 对于动态生成的数据库,您只能在存储配置中定义一个通配符 (*
)集合对象。
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
选项。 请注意,对于动态生成的数据库,您只能在存储配置中定义一个通配符 (*
)集合对象。对于通配符 (
*
) 集合,您也可以使用databases.[n].collections.[n].dataSources.[n].collectionRegex
字段定义正则表达式模式,以便只过滤集合。
databases.[n].collections.[n].dataSources
对象数组,其中每个对象代表要映射到集合的一个
stores
联合数据库实例存储。
databases.[n].collections.[n].dataSources.[n].database
Atlas 集群上包含该集合的数据库的名称。 您必须忽略此设置才能执行以下操作:
为通配符 (
*
) 数据库创建通配符 (*
) 集合。Global 多个数据库。
databases.[n].collections.[n].dataSources.[n].databaseRegex
可选。 用于通配数据库以组合多个collection的正则表达式模式。如果指定此选项,则联合数据库实例包含单个数据库,其中包含来自多个数据库的collection。对于全球数据库,您必须执行以下操作:
省略
database
字段。为
databases.[n].collections.[n].dataSources.[n].collection
字段指定一个有效名称。
例子
假设您有 2 个名为
foo
和bar
的数据库,每个数据库都有一个名为Sales
的集合。 您可以在存储配置中使用databaseRegex
选项合并来自foo
和bar
的Sales
集合:{ "databases": [ { "name": "Transactions", "collections": [ { "name": "AllSales", "dataSources": [ { "storeName": "atlasStore", "databaseRegex": ".*", "collection": "Sales" } ] } ] } ] } 对于前面的
databases
对象, Atlas Data Federation在联合数据库实例中生成以下内容:名为
Transactions
的虚拟数据库。名为
AllSales
的虚拟集合,其中包含名为Sales
的集合中的数据,而该集合位于名称与databaseRegex
选项中指定的正则表达式模式匹配的所有数据库中。
如果指定此选项,则必须指定collection的名称。不能为通配符collection指定此选项。
databases.[n].collections.[n].dataSources.[n].collection
联合数据库实例存储所基于的 Atlas 集群中的集合名称。 对于以下情况,必须忽略此设置:
创建通配符 (
*
) collection。创建与正则表达式模式匹配的通配符集合名称。
使用正则表达式模式组合数据库中的多个collection。
databases.[n].collections.[n].dataSources.[n].collectionRegex
条件:对于通配符collection,为可选项;在组合数据库中的collection时为必填项。
用于创建通配符 (
*
) collection或组合数据库中的多个collection的正则表达式模式。要将 regex 模式用于通配符 (``*``) collection 名称,必须执行以下操作:
指定通配符 (
*
) 作为databases.[n].collections.[n].name
的值。Omit
databases.[n].collections.[n].dataSources.[n].collection
.
如果指定此字段用于生成通配符集合,则联合数据库实例仅包含名称与指定正则表达式匹配的集合。 联合数据库实例存储配置中的collection使用其在 Atlas 集群中的原始名称。
要使用正则表达式模式组合数据库中的多个collection,必须执行以下操作:
指定一个不是通配符 (
*
) 的名称作为databases.[n].collections.[n].name
的值。Omit
databases.[n].collections.[n].dataSources.[n].collection
.
如果您指定此字段来组合多个集合,则联合数据库实例中的集合实例包含名称与指定正则表达式匹配的所有Atlas集合中的数据。 联合数据库实例存储配置中的集合使用您指定为
databases.[n].collections.[n].name
值的名称。要学习;了解有关 regex 语法的更多信息,请参阅 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
您无法使用 Atlas 用户界面中的可视化编辑器来配置此设置。
databases.[n].views.[n].source
视图源集合的名称。 如果要创建具有
$sql
阶段的视图,则必须省略此字段,因为SQL声明将指定源集合。
databases.[n].views.[n].pipeline
要应用 集合 的聚合管道阶段
source
。您还可以使用$sql
阶段创建视图。