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.hardwarecollection映射到存储配置中的dataCenter.inventorycollection。
{ "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].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) 分片的secondarynearest- 将所有读取请求路由到符合条件的随机副本集成员,无论该成员是主节点 (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].nameAtlas Data Federation 将数据存储中包含的数据映射到的数据库的名称。 您可以通过指定
*作为数据库名称来动态生成数据库。 动态生成的数据库:可与显式定义的数据库并存。 但是,Atlas Data Federation 不会动态生成名称与存储配置中显式定义的数据库冲突的数据库。
只能来自单个 Atlas 集群。 Atlas Data Federation 不会从多个 Atlas 集群或其他数据存储动态生成数据库。
databases.[n].collections对象数组,其中每个对象代表一个集合和映射到
stores联合数据库实例存储的数据源。 对于动态生成的数据库,您只能在存储配置中定义一个通配符 (*)集合对象。
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选项。 请注意,对于动态生成的数据库,您只能在存储配置中定义一个通配符 (*)集合对象。对于通配符 (
*) 集合,您也可以使用databases.[n].collections.[n].dataSources.[n].collectionRegex字段定义正则表达式模式,以便只过滤集合。
databases.[n].collections.[n].dataSources对象数组,其中每个对象代表要映射到集合的一个
stores联合数据库实例存储。
databases.[n].collections.[n].dataSources.[n].databaseAtlas 集群上包含该集合的数据库的名称。 您必须忽略此设置才能执行以下操作:
为通配符 (
*) 数据库创建通配符 (*) 集合。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].providerclusterNameAtlas 集群的名称 ()
stores.[n].clusterNamedatabaseNameAtlas 集群中数据库的名称
databases.[n].collections.[n].dataSources.[n].database()collectionName您无法使用 Atlas 用户界面中的可视化编辑器来配置此设置。
databases.[n].views.[n].source视图源集合的名称。如果要创建带有$sql阶段的视图,则必须省略此字段,因为SQL声明将指定源集合。