对于AI助手:文档索引位于 https://www.mongodb.com/zh-cn/docs/llms.txt — 通过将 .md 附加到任何URL路径,可以获得所有页面的降价版本。
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs 菜单

为标准集合配置 Online 存档

重要

该功能在弹性集群中不可用

Flex 集群目前不支持此功能。要了解更多信息,请参阅 Atlas Flex 限制。

您可以通过指定存档规则来配置要存档的标准集合中的数据。标准集合的存档规则可以是以下规则之一:

  • 与保留期(以天为单位)配对的日期字段,用于确定Atlas何时将数据从集群移至存档 (Date Match)。

  • 自定义JSON查询,用于选择要存档的文档 (Custom Criteria)。

要配置 Atlas 集群以进行在线存档,请执行以下操作:

  1. 通过提供集合命名空间和选择要存档数据的条件来创建存档规则。

  2. (可选)指定常用查询字段对存档数据进行分区。

在集群上配置 Online Archive 时,Atlas 会在您的集群上创建 2 个联合数据库实例,一个仅用于您的存档,一个用于您的集群和存档。

有关应用于所有在线存档的限制,请参阅限制

在配置 Online 存档之前,请确保您的Atlas 集群运行正常。如果一个节点关闭,存档将保持 PENDING 状态,直到集群完全正常运行。

要创建在线存档,您必须具有该项目的 Project Data Access Admin 或更高访问权限。

要查看存档是否可用,您必须拥有 Project Read Only 或更高级别的访问权限。

要使用 Atlas CLI 为集群创建在线存档,请运行以下命令:

atlas clusters onlineArchives create [options]

如需使用 Atlas CLI 观察特定在线存档是否可用,请运行以下命令:

atlas clusters onlineArchives watch <archiveId> [options]

要详细了解先前命令的语法和参数,请参阅 Atlas CLI 文档了解 atlas clusters onlineArchives createatlas clusters onlineArchives watch。

提示

请参阅:相关链接

要通过 API 配置在线存档,请向 OnlineArchives 终结点发送 POST 请求。

注意

如果使用 DATE 标准,则必须指定分区键包含 date 字段。

如果集群已具有针对同一数据库和集合具有相同存档规则的 Active在线存档,则操作失败。但是,如果现有在线存档处于 PausedDeleted 状态,则会创建新的在线存档并将其状态设立为 Active。要学习;了解有关语法和选项的更多信息,请参阅API。

要为标准集合配置在线存档,请在Atlas用户用户界面中:

1
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。

  2. 如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。

  3. 在侧边栏中,单击 Database 标题下的 Clusters

会显示集群页面。

2

在侧边栏中,单击 Online Archive

显示Online 存档 (在线存档)页面。

3

要为您的集合配置 Online Archive,请单击:

  • Configure Online Archive 按钮。

  • Add Archive 按钮(随后单击)。

4
5
  1. Namespace 字段中指定集合命名空间,其中包括数据库名称、点 (.) 分隔符和集合名称(即 <database>.<collection>)。

    Online Archive 一旦创建,就无法修改命名空间

  2. 对集合的 Date字段创建索引以确保最佳性能。

  3. 选择您要存储存档数据的云提供商地区。

    重要提示:我们建议您尽可能选择与集群相同的地区,因为如果选择不同的地区,可能会产生更高的数据传输费用。

    Atlas 根据部署集群的云提供商显示云提供商地区。对于多云集群,Atlas 显示最高优先级提供商的云提供商地区。Atlas 会在与您的集群部署地区相近或完全匹配的地区旁边显示

    对于部署在 AWS 上的 Atlas 集群,您可以选择以下地区之一:

    Data Federation区域
    Amazon Web Services地区
    Atlas 区域

    美国北弗吉尼亚州

    us-east-1

    US_EAST_1

    美国俄勒冈州

    us-west-2

    US_WEST_2

    巴西圣保罗

    sa-east-1

    SA_EAST_1

    爱尔兰

    eu-west-1

    EU_WEST_1

    英国英格兰伦敦

    eu-west-2

    EU_WEST_2

    德国法兰克福

    eu-central-1

    EU_CENTRAL_1

    Tokyo, Japan

    ap-northeast-1

    AP_NORTHEAST_1

    Seoul, South Korea

    ap-northeast-2

    AP_NORTHEAST_2

    印度孟买

    ap-south-1

    AP_SOUTH_1

    新加坡

    ap-southeast-1

    AP_SOUTHEAST_1

    澳大利亚悉尼

    ap-southeast-2

    AP_SOUTHEAST_2

    加拿大魁北克省蒙特利尔

    ca-central-1

    CA_CENTRAL_1

    对于在Azure上部署的Atlas集群,只有当集群上没有使用其他云提供商的其他在线存档时,您才能选择Azure地区。 如果集群上的现有 Online 存档使用Amazon Web Services或Google Cloud Platform存储存档数据,则您只能为该集群上的任何新 Online Archive 选择Amazon Web Services或Google Cloud Platform区域。

    重要提示:对于部署在Azure上的集群,如果您有使用Amazon Web Services或Google Cloud Platform的现有 Online Archive,并将其删除,则必须等待五天才能创建使用Azure的新 Online 存档 。在此五天内,任何创建新 Online 存档的尝试仍默认为您最初选择的云提供商。

    对于部署在 Azure 上的 Atlas 集群,您可以选择以下地区之一:

    Data Federation区域
    Azure 区域
    Atlas 区域

    Virginia, USA

    eastus2

    US_EAST_2

    巴西圣保罗

    brazilsouth

    BRAZIL_SOUTH

    荷兰

    westeurope

    EUROPE_WEST

    AtlasGoogle Cloud Platform对于部署在Google Cloud Platform 上的 集群,只有当集群上没有使用其他云提供商的其他 Online Archive 时,您才能选择 地区。如果集群上的现有 Online 存档使用Amazon Web ServicesAzure来存储存档数据,则您只能为该集群上的任何新 Online Archive 选择Amazon Web ServicesAzure地区。

    重要提示:对于部署在Google Cloud Platform上的集群,如果您有使用Amazon Web ServicesAzure的现有 Online Archive,然后将其删除,则必须等待五天才能创建使用Google Cloud Platform 的新 Online 存档 。在此五天内,任何创建新 Online 存档的尝试仍默认为您最初选择的云提供商。

    Atlas对于部署在 上的Google Cloud Platform 集群,您可以选择以下区域之一:

    Data Federation区域
    Google Cloud 区域
    Atlas 区域

    Iowa, USA

    us-central1

    IOWA_USA

    比利时

    europe-west1

    BELGIUM_EU

    重要提示: Atlas创建在线存档后,您将无法修改存储地区。

  4. Date MatchCustom Criteria标签页下指定选择要存档的文档的标准。

    要使用日期字段和天数的组合从集合选择文档,请执行以下操作:

    • 指定集合中文档中已建立索引的日期字段。 要指定嵌套字段,请使用点表示法。

    • 指定数据在 Atlas 集群中保留的天数。

    • 选择指定日期字段的日期格式。日期可以表示为 ISO-8601 格式的日期、UNIX 纪元格式的时间戳或 ObjectId。UNIX 纪元时间戳可以用纳秒、毫秒或秒表示。

      如果选择以下任一格式,则指定日期字段的值必须为BSON类型long

      • EPOCH_SECONDS

      • EPOCH_MILLIS

      • EPOCH_NANOSECONDS

      重要提示:在线存档创建后,您将无法修改日期字段。

    要使用自定义过滤从集合中选择文档,请指定要运行的有效JSON过滤。 Atlas将指定的自定义过滤与db. 集合.find(过滤) 命令。 不能使用空文档参数 ( {} ) 返回所有文档。 您可以使用MongoDB Atlas操作符(例如$expr )来利用所有聚合操作符,如以下示例所示。

    重要提示:以下示例假定所有文档都包含具有日期时间值的 bucket_end_date 字段。在以下示例中, Atlas存档所有不包含 bucket_end_date字段的文档以及 bucket_end_date 不是日期时间值的所有文档。

    例子

    在此自定义过滤示例中,当当前日期超过文档中bucket_end_date字段中的日期时, Atlas会从当前日期中减去 30 天(以毫秒为单位),然后在经过这么多天、小时和分钟后存档数据。

    {
    "$expr": { "$lte": [
    "$bucket_end_date",
    { "$subtract": [ "$$NOW", 2592000000 ] }
    ] }
    }

    在此自定义过滤示例中,当当前日期超过objectId内的日期时, Atlas会从当前日期中减去 30 天(以毫秒为单位),然后在经过这么多天、小时和分钟后存档数据。

    {
    "$expr": {
    "$lte": [
    {"$toDate": "$_id"},
    { "$subtract": [ "$$NOW", 2592000000 ] }
    ]
    }
    }

    如果您在自定义过滤中使用$expr ,有时Atlas 集群可能无法使用索引来存档数据。

    以下自定义过滤器示例展示了一个具有多个字段的复杂条件。

    {{{
    "$and":[
    {"$expr":{"$lte":["$createdAt",{"$subtract":["$$NOW",43200000]}]}},
    {"status":{"$ne":"active"}}
    ]
    }}}

    重要

    Atlas在第一次存档运行期间运行索引充分性查询,以确定存档进程的效率。如果扫描的文档数与返回的文档数之间的差值为 10 或更多,则查询结果将触发 Index Sufficiency Warning。此警告表明您的索引不足,无法实现有效的存档进程。对于基于日期的存档,必须为日期字段索引。对于使用表达式的自定义条件, Atlas可能会先转换一个值,然后再根据查询对其进行评估。

    在检测到足够的索引后,索引充分性查询将停止运行。如果集合上的索引后来被删除并导致存档过程变慢,Atlas 不会发出 Index Sufficiency Warning

6
  1. (可选)指定 Data Retention Period(删除期限限制)。

    默认情况下,Atlas 不会删除存档数据。但是,如果您指定 Data Retention Period(删除期限限制),则可以在 79125 天(25 年)的范围内指定存档数据保留期限。Atlas 会在您在指定的天数后删除存档数据。该数据过期规则在您设置 Data Retention Period(删除期限限制)的 24 小时后生效。

    警告: Atlas删除数据后,您将无法恢复数据。

  2. (可选)指定 Schedule Archiving Window(删除期限限制)。

    默认情况下,Atlas 会定期运行查询来存档数据。不过,您可以切换Schedule Archiving Window以明确安排您希望 Atlas 存档数据的时间窗口。您可以指定以下内容:

    • 频率。您可以选择每天、一周中的特定日期或每月的特定日期运行作业。如果您希望将数据存档作业安排在每月 29 日、30 日或 31 日,则 Atlas 在没有这些日期的月份(例如二月)不会运行存档作业。

    • 时间窗口,以小时为单位。选择您希望 Atlas 运行数据归档作业的时间段。您必须指定至少两个小时。如果正在运行的作业在时间窗口内未完成,Atlas 会继续运行作业直到完成。

7
8

重要提示:存档必须至少有一个分区字段。

分别在Second most commonly queried fieldThird most commonly queried field字段中输入集合中最多两个最常查询的字段。 要指定嵌套字段,请使用点表示法。 请勿在使用点表示法指定的嵌套字段两边包含引号 ( "" )。

警告

不能指定包含句号 (.) 的字段名进行分区。

所指定的字段用于对存档数据进行分区。分区类似于文件夹。对于 Date Match 条件,日期字段默认处于分区的第一个位置。如果您经常按另一个字段进行查询,则可以将此字段移动到分区的第一个位置。

此路径中所列字段的顺序与其在复合索引中的顺序同样重要。指定路径中的数据会先按第一个字段的值进行分区,接着按下一字段的值进行分区,依此类推。Atlas 支持使用分区对指定字段进行查询。

例如,假设您正为 sample_mflix 数据库中的 movies 集合配置在线存档。如果已存档字段为 released 日期字段,而您已将其移至第三个位置,则第一个被查询的字段为 title,而第二个被查询字段则为 plot,同时您的分区将如下所示:

/title/plot/released

Atlas 首先为 title 字段创建分区,然后为 plot 字段创建分区,最后为 released 字段创建分区。Atlas 使用分区来处理对以下字段的查询:

  • title 字段。

  • title 字段和 plot 字段,

  • title 字段、plot 字段和 released 字段。

Atlas 还可以使用分区来支持对 titlereleased 字段的查询。但是,在这种情况下,Atlas 在支持查询方面的效率不如查询仅针对 titleplot 字段。分区按顺序解析;如果查询省略特定分区,Atlas 在使用该分区之后的任何分区时效率会降低。由于对 titlereleased 的查询省略了 plot ,因此 Atlas 使用 title 分区比 released 分区更有效地支持此查询。

Atlas 无法使用分区策略来有效支持对此处未指定字段的查询。此外,Atlas 无法使用分区来支持包含以下字段但不包含 title 字段的查询:

  • plot 字段。

  • released 字段,或

  • plotreleased 字段。

分别在Most commonly queried fieldSecond most commonly queried field字段中输入文档中最多两个最常查询的字段。 要指定嵌套字段,请使用点表示法。 请勿在使用点表示法指定的嵌套字段两边加上引号 ( "" )。

指定字段用于对存档数据进行分区。 分区类似于文件夹。 路径中列出的字段顺序很重要,就像在复合索引中一样。 指定路径中的数据首先按第一个字段的值进行分区,然后按下一个字段的值进行分区。 Atlas支持使用分区对指定字段进行查询。

示例,假设您正在为sample_mflix数据库中的movies集合配置在线存档。 如果查询次数最多的字段是genres字段,第二次查询的字段是title ,则分区将如下所示:

/genres/title

Atlas首先为genres字段创建分区,然后为title字段创建分区。 Atlas使用分区对以下字段进行查询:

  • genres 字段。

  • genres字段和title字段。

Atlas还可以使用分区来支持仅对title字段的查询。 但是,在这种情况下, Atlas在支持查询方面的效率不如查询仅针对genres字段或针对genrestitle字段。 按顺序解析分区;如果查询省略了特定分区, Atlas在使用该分区之后的任何分区时效率会降低。 由于对title的查询省略了genres , Atlas不使用genres分区来支持此查询。 此外, Atlas在使用分区支持对title字段和genres字段进行查询时,效率较低。

Atlas 无法使用分区来支持此处未指定字段的查询。

  • 选择仅包含Amazon Web Services支持的字符的字段。要学习;了解有关应避免使用的字符的更多信息,请参阅创建对象键名称。Atlas会跳过且不会存档包含不受支持的字符的文档。

  • 选择不包含多态数据的字段。Atlas 从集合中抽取 10 个文档,以确定分区字段的数据类型。如果文档中指定的字段值与同一集合中其他文档中的值不匹配,则 Atlas 不会将文档存档。

  • 选择您经常查询的字段,并从第一个位置查询次数最多的字段到最后一个位置查询次数最少的字段进行排序。 例如,如果您经常查询日期字段,则将日期字段保留在第一个位置。但如果您经常查询另一个字段,则该字段应该位于第一个位置。

重要提示:对于 6 月 2023之前创建的在线存档, MongoDB不建议使用关联基数较高的 string 类型字段作为在线存档的查询字段。对于具有高关联基数的 string 类型的字段, Atlas会创建大量分区。这不适应用6 月 2023之后创建的在线存档。要学习;了解更多信息,请阅读MongoDB 博客帖子。

Atlas支持以下分区属性类型:

  • date

  • double

  • int

  • long

  • objectId

  • string

  • boolean

如需详细了解支持的分区属性类型,请参阅分区属性类型。

重要提示:您可以使用explain命令返回用于满足查询的数据分区的信息。要学习;了解详情,请参阅 explain

虽然分区可以提高查询性能,但不包含这些字段的查询需要对所有存档文档进行全面集合扫描,这将花费更长时间并增加成本。 要了解有关分区如何提高 Atlas Data Federation 查询性能的更多信息,请参阅 S3 中的数据结构。

9

您可以查看以下存档规则设置:

  • 数据库和集合的名称

  • 云提供商名称和云提供商区域

  • 日期字段的名称(仅适用于Date Match

  • 在 Atlas 集群上保留数据的天数(仅适用于 Date Match

  • 删除存档数据的天数

  • 存档数据的频率和时间窗口

  • 用于识别存档数据的自定义查询(仅适用于 Custom Criteria

  • 分区字段

如果需要,请单击Back编辑这些设置。

10

您可以对查询运行解释以检查它是否使用索引。如果字段未编制索引,请继续执行下一步以创建索引。如果字段已编制索引,请跳至最后一步。

11
12
  1. Confirm an online archive 标签页中单击 Begin Archiving

  2. 单击 Begin Archiving(开始存档)窗口中的 Confirm(确认)。

警告:文档进入存档队列后,就无法再编辑该文档。请参阅从在线 存档恢复特定文档,将存档数据移回实时Atlas 集群。