Ohhnews

分类导航

$ cd ..
foojay原文

MongoDB Atlas Online Archive:高效管理数据生命周期

#mongodb atlas#数据生命周期#存储优化#数据库性能#云数据库

目录

问题陈述

在生产环境的 MongoDB Atlas 数据库中,某个集合存储了海量数据,其中既包含陈旧数据,也包含当前数据。然而,应用程序并不频繁访问这些陈旧数据,这些数据在集合中每日堆积,导致性能下降且增加了成本。这迫使企业为了维持负载所需的资源而不得不升级集群层级,因为继续使用现有层级已难以支撑。

总而言之,这不仅会对应用程序性能产生负面影响,还意味着更高的资源占用和业务成本。

解决方案

为了避免过度支出,您可以根据日期条件将陈旧数据卸载到更廉价的存储区域,这在 MongoDB 中被称为归档存储。随后,您可以使用 MongoDB 联邦数据库(Federated Databases)访问这些不常使用的归档数据。因此,集群规模、性能和资源利用率均得到了优化。

为了更好地管理 Atlas 集群中的数据,MongoDB 从 MongoDB Atlas 4.4 版本开始引入了在线归档(Online Archive)功能。

优势

  • 根据归档规则中的日期条件自动归档数据,作业默认每五分钟运行一次。
  • 通过“数据联邦”(Data Federation)选项卡中提供的联邦数据库连接查询数据。
  • 除了主集群之外,通过联邦连接访问不常使用的数据,可以提高性能并减少主集群的流量压力。
  • 归档数据可供下游环境查询,并以只读模式使用。

局限性

先决条件

  • 在线归档功能支持 M10 及以上集群层级。
  • 索引可在归档过程中提供更好的性能。
  • 要创建或删除在线归档,您必须拥有以下角色之一:项目数据访问管理员(Project Data Access Admin)、项目集群管理器(Project Cluster Manager)或项目所有者(Project Owner)。

在线归档配置设置

集群 DemoCluster 在数据库 sample_mflix 中拥有一个名为 movies 的集合。根据业务规则,您目前在主集群中存储陈旧数据和最新数据,但数据正如预期般逐日堆积。因此,通过升级层级来调整集群资源会导致成本增加。

为了克服这个问题并高效维护集群,您必须利用在线归档功能将不常使用或陈旧的数据卸载到低成本存储中,并通过联邦数据库连接进行访问。您可以随时根据业务需求通过管理归档来管理在线归档。

在本例中,您已经从 MongoDB Atlas 集群设置中加载了示例数据集(其中一个数据库是 sample_mflix),并且有一个包含陈旧数据和最新数据的 movies 集合。根据业务需求,客户经常使用过去 10 年的数据。因此,计划对集合中超过 10 年的数据实施归档。

要实现在线归档功能,您需要一个基础的 M10 或更高级别的集群: [LOADING...]

定义归档规则

业务需求确定后,定义根据年龄、大小或其他条件归档哪些数据字段的规则。我们可以通过 Atlas UI 或 Atlas API 设置在线归档规则。

sample_mflix 数据库中的 movies 集合有一个名为 released 的日期字段。为了优化在线归档的性能,您需要使用以下命令在该字段上创建索引。

$ node
use sample_mflix

db.movies.createIndex({"released":1})

创建索引后,您可以选择此字段作为基于日期的归档依据,并将超过 10 年(3652 天)的数据移动到冷存储中。这意味着集群将存储小于 10 年的文档,而所有其他文档将移至维护成本更低的归档存储中。

在实施归档规则之前,movies 集合的总文档数为 21,349,如下图所示。 [LOADING...]

实施步骤

第 1 步:转到“集群概览”(Cluster Overview)下的“浏览集合”(Browse Collections),然后选择“在线归档”(Online Archive)选项卡。 [LOADING...]

第 2 步:提供集合命名空间、存储区域、日期匹配字段和归档的年龄限制。在本例中:

  • 命名空间:sample_mflix.movies
  • 选择区域:AWS / Mumbai(云提供商支持 AWS、Azure、GCP)
  • 日期字段:released(需要索引字段)
  • 年龄限制:3652 天(自日期起 10 年)

例如,今天是 2024 年 2 月 28 日,那么 3652 天前就是 2014 年 2 月 28 日。 [LOADING...]

第 3 步:您可以添加一些可选功能。

删除年龄限制(Delete age limit):允许根据所需条件从归档存储中清除数据。这是一个可选功能,您可以根据组织的决策使用。在此示例中,我们不根据业务规则清除任何数据。

调度归档窗口(Schedule archiving window):此功能允许您自定义调度。例如,您可以在非工作时间或停机窗口运行归档作业,以确保对应用程序的影响降至最低。

第 4 步:您可以添加所需的任何进一步的分区字段。 [LOADING...]

第 5 步:规则配置完成后,向导会提示您详细审查归档规则。您可以查看命名空间、服务提供商 (AWS)、存储区域 (Mumbai)、归档字段、年龄限制等。 [LOADING...]

第 6 步:审查步骤完成后,点击“开始归档”(BeginArchiving),在数据联邦选项卡中创建数据联邦实例。然后,它将根据验证规则开始归档数据,并移动到 AWS S3 存储中。最好的功能之一是您可以随时修改、暂停和删除在线归档规则。例如,您的归档标准可能会随时更改。 [LOADING...]

第 7 步:在线归档设置完成后,默认情况下归档作业每五分钟运行一次。它会根据日期字段验证条件并将数据移动到归档存储。此外,您可以根据自定义范围而不是默认调度设置此作业。您可以在集群主部分查看此归档作业,如下图所示,其实际状态为 Archiving(归档中)或 IDLE(空闲)。 [LOADING...]

Atlas 在线归档功能将在“数据联邦”选项卡中为集群创建两个联邦数据库实例,以便除了常规连接字符串外还可以访问数据:

  • 一个仅用于查询归档数据的联邦数据库实例
  • 一个用于同时查询集群和归档数据的联邦数据库实例

[LOADING...]

当归档作业按计划运行时,它会将文档移动到归档存储。结果,主集群中集合的文档计数将通过保留最新数据(即热数据)而减少。因此,根据上述场景,movies 集合现在包含新鲜/最新的数据。

movies 集合文档计数:2186(排除了超过 10 年的文档)。

每天,它都会验证 3652 天前的数据,以查找要移动到归档存储的文档。您可以在下图中观察集合文档计数: [LOADING...]

如何连接和访问

您可以通过数据联邦向导访问归档或只读数据。只需连接以下两个连接字符串即可:

  • 仅归档(我们为其设置归档规则的特定数据库集合)
  • 集群归档(其中的所有数据库)

* 您可以将这些连接字符串指向下游环境以读取数据或通过最终用户应用程序使用它。

Atlas 数据联邦

数据联邦提供了跨各种受支持存储格式联合查询的能力,包括 Atlas 集群、Atlas 在线归档、Data Lake 数据集、AWS S3 存储桶和 HTTP 存储。您可以获取见解或在服务的任何受支持存储格式之间移动数据。 [LOADING...]

  1. DemoCluster archive:

这是您的归档联邦数据库实例,允许您仅查询归档中的数据。通过此字符串连接,您将仅看到归档的集合,如下图所示。有关更多详细信息,请访问文档

在此,集群名称 DemoCluster 拥有归档的集合数据,您只能通过使用下图中的连接字符串来检索。

连接字符串:

mongodb://Username:Password@archived-atlas-online-archive-65df00164668c44159eb65c8-abcd6.a.query.mongodb.net/?ssl=true&authSource=admin

[LOADING...]

如图所示,您只能以只读模式查看这些归档集合的数据,这意味着您将来无法修改这些文档。 [LOADING...]

  1. DemoCluster cluster archive:

此集群和归档的联邦数据库实例允许您同时查询集群和归档数据。在此,您可以访问集群中的所有数据库,包括未归档的集合,如下图所示。

连接字符串:

mongodb://Username:Password@atlas-online-archive-65df00164668c44159eb65c8-abcd6.a.query.mongodb.net/?ssl=true&authSource=admin

注意:使用此连接字符串,您可以查看集群内的所有数据库以及归档集合的总文档计数。它同样支持只读模式。 [LOADING...]

项目集群概览

如前所述,主集群 DemoCluster 根据业务需求包含最新数据(即经常使用的数据)。您可以随时通过指向实时应用程序更改来访问数据并执行读写操作。

注意:在本例中,最新数据指任何小于 10 年的数据。

连接字符串:

mongodb+srv://Username:Password@democluster.abcd6.mongodb.net/

在此场景中,归档陈旧数据后,您在 movies 集合中只能看到 2186 条小于 10 年的数据文档。 [LOADING...]

您可以使用 MongoShell、应用程序或任何第三方工具(如 MongoCompass)来访问归档数据和主集群数据。

或者,通过集群连接中的以下向导,您可以使用所有这三个连接字符串:

  1. 连接到集群和在线归档(只读归档实例连接字符串)
  2. 连接到集群(直接集群连接以执行 CRUD 操作)
  3. 连接到在线归档(特定于归档数据库的只读连接字符串)

[LOADING...]

MongoShell 提示:要从“数据联邦”选项卡连接两个归档数据,您可以以只读模式查看两个归档数据之间的差异。 [LOADING...]

MongoShell 提示:在此主集群中,您可以查看数据库列表,通过集群连接字符串访问、读取和写入频繁使用的数据。 [LOADING...]

结论

MongoDB Atlas 的在线归档功能提供了一种高效且经济的方式来管理数据生命周期。通过将不常使用的陈旧数据自动卸载到低成本存储,企业不仅可以优化集群性能,还能显著降低资源利用成本。同时,通过数据联邦提供的只读访问,确保了数据在需要时依然可用,从而完美平衡了性能与成本控制。## 结论

总而言之,MongoDB Atlas 的在线归档功能使企业能够优化存储成本、提升性能,并通过安全地存储数据以满足长期保留需求来遵守数据留存政策,从而在整个生命周期内有效地管理数据并提高存储效率。

我们非常期待听到您对本文所学内容的见解!欢迎加入我们的开发者社区,继续参与讨论,并了解其他人正在使用 MongoDB 构建哪些应用。

文章 Atlas Online Archive: Efficiently Manage the Data Lifecycle 最早出现在 foojay 上。