Docs 菜单

Docs 主页启动和管理 MongoDBMongoDB Atlas

Atlas 集群

在此页面上

  • Atlas Data Store 的配置示例
  • 配置格式
  • stores
  • databases

Atlas Data Federation 支持 Atlas 集群作为联合数据库实例存储。 您必须在联合数据库实例中定义到 Atlas 集群的映射,才能运行数据查询。

重要

存储配置中的信息在 MongoDB 内部可见,并存储为操作数据,以监控和提高 Atlas Data Federation 的性能。 因此,我们建议您不要在配置中使用 PII

例子

考虑一个名为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 collection 分析 Atlas 集群中的数据。当你运行查询时,查询首先Go到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 集合之间的映射。
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].provider

定义数据的存储位置。 对于 Atlas 集群中的collection,值必须为atlas

stores.[n].clusterName

商店所基于的 Atlas 集群的名称。 集群必须与联合数据库实例位于同一项目中。 数据分区上的source字段是 Atlas 集群的名称。

stores.[n].projectId

包含商店所基于的 Atlas 集群的项目的唯一标识符。

stores.[n].readPreference

可选。集群读取偏好,描述如何将读取请求路由到集群。

例子

以下readPreference设置指定了secondary 模式ANALYTICS节点类型。

{
...
"stores": [
{
"provider": "atlas",
"clusterName": <CLUSTER_NAME>,
"name": <STORE_NAME>,
"projectId": <PROJECT_ID>,
"readPreference": {
"mode": "secondary",
"tagSets": [
[
{
"name": "nodeType",
"value": "ANALYTICS"
}
],
...
]
}
}
]
}
stores.[n].readPreference.mode

可选。 读取偏好模式,用于指定将读取请求路由到哪个副本集成员。值可以是以下之一:

  • primary — 将所有读取请求路由到副本集主节点

  • primaryPreferred - 仅当primary不可用时,将所有读取请求路由到副本集主节点和从节点成员

  • secondary - 将所有读取请求路由到副本集的从节点

  • secondaryPreferred - 仅当 成员不可用时,将所有读取请求路由到副本集的从 节点和分片集群上的主secondary 节点

  • nearest - 将所有读取请求路由到符合条件的随机副本集成员,无论该成员是主节点还是从节点

如果省略,则默认值为 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 — 返回最近某一特定时间点跨分片出现的多数提交数据。要了解更多信息,请参阅读关注“snapshot”。

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

对象数组,其中每个对象代表一个数据库、其集合以及可选的集合上的任何视图。每个数据库可以有多个collectionsviews对象。

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].storeName

<collection>要映射到 的联合数据库实例存储的名称。必须匹配 数组中对象的name stores}。

databases.[n].collections.[n].dataSources.[n].database

Atlas 集群上包含该集合的数据库的名称。 您必须忽略此设置才能执行以下操作:

  • 为通配符 ( * ) 数据库创建通配符 ( * ) 集合。

  • Global 多个数据库。

databases.[n].collections.[n].dataSources.[n].databaseRegex

可选。 用于通配数据库以组合多个collection的正则表达式模式。如果指定此选项,则联合数据库实例包含单个数据库,其中包含来自多个数据库的collection。对于全球数据库,您必须执行以下操作:

例子

假设您有 2 个名为foobar的数据库,每个数据库都有一个名为Sales的集合。 您可以在存储配置中使用databaseRegex选项合并来自foobarSales集合:

{
"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 名称,必须执行以下操作:

如果指定此字段用于生成通配符集合,则联合数据库实例仅包含名称与指定正则表达式匹配的集合。 联合数据库实例存储配置中的collection使用其在 Atlas 集群中的原始名称。

要使用正则表达式模式组合数据库中的多个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

对象数组,其中每个对象代表集合上的一个聚合管道。要了解有关视图的更多信息,请参阅视图。

databases.[n].views.[n].name

视图名称。

databases.[n].views.[n].source

视图源集合名称。

databases.[n].views.[n].pipeline

要应用于 集合source 的聚合管道阶段 。

← 部署一个联合数据库实例。