MongoDB Atlas 和 Google Cloud 之间的数据转换

Last reviewed 2023-12-13 UTC

许多公司都使用 MongoDB 作为操作数据存储区,并希望通过对这些数据执行复杂的分析来丰富这些数据的价值。为此,需要汇总 MongoDB 数据并将其移动到可以执行分析的数据仓库中。此参考架构介绍了如何在 Google Cloud 中配置此集成流水线。

在此架构中,您使用 Dataflow 模板将 MongoDB Atlas 中的数据集成到 BigQuery 中。这些 Dataflow 模板会将 MongoDB 使用的文档格式转换为 BigQuery 使用的列式格式。这些模板依赖 Apache Beam 库来执行此转换。因此,本文档假定您熟悉 MongoDB,并对 Dataflow 和 Apache Beam 有一定的了解。

架构

下图展示了部署此解决方案时使用的参考架构。下图演示了各种 Dataflow 模板如何将数据从 MongoDB 迁移到 BigQuery 数据仓库并对其进行转换。

MongoDB Atlas 和 Google Cloud 之间的数据转换架构

如图所示,此架构基于以下三个模板:

  • MongoDB to BigQuery 模板。 此 Dataflow 模板是一种批处理流水线,可从 MongoDB 读取文档并将其写入 BigQuery 以进行数据分析。如果需要,您可以通过在 JavaScript 中编写用户定义的函数 (UDF) 来扩展此模板。如需查看 UDF 示例,请参阅运营效率
  • BigQuery to MongoDB 模板。 此 Dataflow 模板是一种批处理模板,可用于从 BigQuery 读取经过分析的数据并将其写入 MongoDB。
  • MongoDB to BigQuery (CDC) 模板。 此 Dataflow 模板是一种流处理流水线,可与 MongoDB 变更数据流搭配使用。您可以创建一个发布者应用,该应用将 MongoDB 变更数据流中的更改推送到 Pub/Sub。然后该流水线从 Pub/Sub 读取 JSON 记录并将其写入 BigQuery。与 MongoDB to BigQuery 模板一样,您可以通过编写 UDF 来扩展此模板。

    通过使用 MongoDB to BigQuery (CDC) 模板,您可以确保 MongoDB 集合中发生的任何更改都会发布到 Pub/Sub。如需设置 MongoDB 变更数据流,请按照 MongoDB 文档中的变更数据流中的说明操作。

使用场景

使用 BigQuery 分析 MongoDB Atlas 数据在一系列行业中非常有用,包括金融服务、零售、制造和物流以及游戏应用。

金融服务

Google Cloud 和 MongoDB Atlas 提供的解决方案可处理当今金融机构的复杂且不断变化的数据需求。通过使用 BigQuery 分析 MongoDB Atlas 中的财务数据,您可以为以下任务开发解决方案:

  • 实时欺诈检测。金融机构希望实时检测和阻止欺诈性交易。通过使用机器学习 (ML) 和分析 BigQuery 中的客户行为数据,您可以识别表示欺诈的模式。
  • 个性化客户体验。金融机构也有意向提供个性化客户体验。通过在 BigQuery 中存储和分析客户数据,您可以创建解决方案以生成个性化推荐、提供量身定制的产品和服务,以及提供更好的客户服务。
  • 风险管理。金融机构始终需要帮助识别和降低风险的流程。通过分析 BigQuery 中各种来源的数据,您可以帮助识别指示潜在风险的模式和趋势。

零售

客户数据的智能利用,能够将其与商品数据相结合,并执行实时个性化互动来定义未来的电子商务。为了满足客户需求,零售商需要通过收集和分析数据来制定数据驱动的决策。BigQuery 和 MongoDB Atlas 让您可使用客户数据推动个性化创新,例如以下领域:

  • 全渠道商务。使用 MongoDB 存储和管理来自各种来源的数据,包括在线和离线商店、移动应用和社交媒体。这种数据的存储和管理以及 BigQuery 分析使其成为全渠道零售商的理想选择,这些零售商需要在所有渠道中为客户提供无缝体验。
  • 实时数据分析。使用 BigQuery,您可以实时了解客户、库存和销售业绩。 这些数据分析可帮助您在价格、促销和产品植入方面做出更明智的决策。
  • 个性化推荐。个性化商品推荐引擎可帮助零售商提高销量和客户满意度。通过存储和分析客户数据,您可以识别模式和趋势,以便为每位客户推荐可能感兴趣的商品。

制造业与物流

分析 BigQuery 中的 MongoDB 数据还会为制造业和物流行业带来以下好处:

  • 实时可见性。您可以实时了解操作。这有助于您做出有关生产、库存和运输的更好的决策。
  • 供应链优化。管理供应链不确定性和分析数据来自不同来源有助于降低费用并提高效率。

游戏

BigQuery 中的分析功能还让游戏开发者和发布商能够打造尖端游戏,并提供卓越的游戏体验,包括:

  • 实时游戏内容。您可以使用分析来打造实时游戏内容体验,以生成排行榜、配对系统和多人游戏功能。
  • 个性化玩家体验。您可以使用人工智能 (AI) 和机器学习技术为玩家提供有针对性的建议和个性化游戏体验。
  • 游戏分析。您可以分析游戏数据,以确定趋势和模式,从而帮助您改进游戏设计、游戏体验和业务决策。

设计替代方案

您可以采用两种替代方案来使用 Dataflow 模板作为从 MongoDB 到 BigQuery 的集成流水线:具有 BigQuery 订阅的 Pub/Sub 或 Confluent Cloud。

具有 BigQuery 订阅的 Pub/Sub

除了使用 Dataflow 模板外,您还可以使用 Pub/Sub 在 MongoDB 集群和 BigQuery 之间设置集成流水线。如需使用 Pub/Sub 而不是 Dataflow,请执行以下步骤:

  1. 配置 Pub/Sub 架构和主题,以从 MongoDB 变更数据流中提取消息。
  2. 在 Pub/Sub 中创建 BigQuery 订阅,以便在收到消息时将其写入现有 BigQuery 表。如果您不使用 BigQuery 订阅,则需要拉取或推送订阅以及订阅者(例如 Dataflow)以读取消息并将其写入 BigQuery。

  3. 设置变更数据流,以监听在 MongoDB 中插入且与用于 Pub/Sub 的架构匹配的新文档。

如需详细了解此替代方案,请参阅使用 Pub/Sub BigQuery 订阅为 MongoDB 变更数据流创建数据流水线

Confluent Cloud

如果您不想创建自己的发布者应用来监控 MongoDB 变更数据流,则可以改用 Confluent Cloud。在此方法中,您使用 Confluent 配置 MongoDB Atlas 源连接器以读取 MongoDB 数据流。然后,配置 BigQuery 接收器连接器,以将数据从 Confluent 集群接收到 BigQuery。

如需详细了解此替代方案,请参阅使用 Confluent 连接器将数据从 MongoDB 流式传输到 BigQuery

设计考虑事项

创建 MongoDB Atlas to BigQuery 解决方案时,您应考虑以下方面。

安全性、隐私权和合规性

当您运行集成流水线时,Dataflow 使用以下两个服务账号来管理安全性和权限:

  • Dataflow 服务账号。 Dataflow 服务会在作业创建请求发出期间使用 Dataflow 服务账号来执行各种操作(例如,代表您检查项目配额以及创建工作器实例)。Dataflow 服务也会使用此账号在作业执行期间管理作业。此账号也称为 Dataflow 服务代理。
  • 工作器服务账号。 在您提交作业后,工作器实例使用工作器服务账号访问输入和输出资源。默认情况下,工作器将您项目的 Compute Engine 默认服务账号用作工作器服务账号。工作器服务账号必须具有 roles/dataflow.worker 权限。

此外,您的 Dataflow 流水线必须能够访问 Google Cloud 资源。如需授予此访问权限,您需要向 Dataflow 项目的工作器服务账号授予所需角色,以便项目可以在运行 Dataflow 作业时访问资源。例如,如果您的作业写入 BigQuery,则您的服务账号还必须至少具有要更新的表或其他资源的 roles/bigquery.dataEditor 角色。

费用优化

运行 Dataflow 模板的费用取决于预定的工作器节点和流水线类型。如需了解费用,请参阅 Dataflow 价格

每个 Dataflow 模板都可以处理在一个 MongoDB 集合到一个 BigQuery 表之间移动数据的操作。因此,随着集合数量的增加,使用 Dataflow 模板的费用也可能会增加。

运营效率

为了高效地使用和分析 MongoDB 数据,建议您对该数据进行自定义转换。例如,您可能需要重新设置 MongoDB 数据的格式以匹配目标架构,或者隐去敏感数据或过滤输出中的某些元素。如果您需要执行此类转换,则可以使用 UDF 扩展 MongoDB to BigQuery 模板的功能,而无需修改模板代码。

UDF 是一种 JavaScript 函数。UDF 应接收并返回 JSON 字符串。以下代码展示了一个示例转换:

/**
* A simple transform function.
* @param {string} inJson
* @return {string} outJson
*/
function transform(inJson) {
   var outJson = JSON.parse(inJson);
   outJson.key = "value";
   return JSON.stringify(outJson);
}

如需详细了解如何创建 UDF,请参阅为 Dataflow 模板创建用户定义的函数

创建 UDF 后,您需要按照以下步骤扩展 MongoDB to BigQuery 模板以使用此 UDF:

  • 首先,您需要将包含 UDF 的 JavaScript 文件加载到 Google Cloud Storage 中。
  • 然后,通过模板创建 Dataflow 作业时,您需要设置以下模板参数:
    • javascriptDocumentTransformGcsPath 参数设置为 JavaScript 文件的 Cloud Storage 位置。
    • javascriptDocumentTransformFunctionName 参数设置为 UDF 名称。

如需详细了解如何使用 UDF 扩展模板,请参阅 MongoDB to BigQuery 模板

性能优化

MongoDB to BigQuery 转换的性能取决于以下因素:

  • MongoDB 文档的大小。
  • MongoDB 集合数量。
  • 转换是依赖于固定架构还是其他架构。
  • 实现团队具备使用基于 JavaScript 的 UDF 的架构转换知识。

部署

如需部署此参考架构,请参阅在 MongoDB 和 Google Cloud 之间部署数据转换

后续步骤

贡献者

作者:

其他贡献者: