迁移到具有 MongoDB 兼容性的 Firestore

本指南将引导您逐步完成以下过程:以尽可能短的停机时间将与 MongoDB 兼容的源数据库迁移到与 MongoDB 兼容的 Firestore 数据库。

迁移过程简介

迁移过程包含以下阶段:

  1. 准备工作:您需要创建迁移所需的资源,并设置将在迁移过程的后续阶段用于运行命令的环境变量。

  2. 从 MongoDB 兼容的源数据库导入:您可以使用 Datastream 服务捕获 MongoDB 兼容的源数据库的内容,并将其转移到 Cloud Storage 存储桶中。

  3. 将数据写入与 MongoDB 兼容的 Firestore 数据库:您可以使用 Dataflow 服务将数据从 Cloud Storage 存储桶转移到与 MongoDB 兼容的 Firestore 数据库中。

    此 Dataflow 流水线将与从 MongoDB 兼容的源数据库提取数据的 Datastream 流同时运行。

  4. 将流量迁移到 Firestore:在流程中的适当时间点,将应用读写流量迁移到与 MongoDB 兼容的 Firestore 数据库,并停止迁移流水线。

下图总结了迁移过程:

流式数据迁移架构

在数据转移期间,与 MongoDB 兼容的源数据库会保持服务状态:

  • Datastream 进程会捕获静态数据和更改事件。
  • 当您必须关闭源数据库的写入流量时,会有一段短暂的部分不可用时间。在此期间,剩余的更改事件会复制到 Firestore。

  • 复制完成后,具有 MongoDB 兼容性的 Firestore 数据库可以成为应用工作负载的新可靠数据源。所有读取和写入流量都可以定向到新数据库。

详细的迁移步骤

本部分更详细地介绍了迁移。

Datastream 服务会在源和目标之间创建数据流。在这种情况下,源是您当前与 MongoDB 兼容的部署,而目标是 Cloud Storage。此流程包含以下步骤:

  1. 为您的 MongoDB 源创建来源 Datastream 连接配置文件。具体说明取决于 MongoDB 兼容型来源的类型和部署方式。

  2. 创建一个 Cloud Storage 存储桶,用于接收来自 MongoDB 兼容型源数据库的数据和更改事件。

  3. 创建使用此 Cloud Storage 存储桶的目标 Datastream 连接配置文件

  4. 创建并启动 Datastream 数据流,将来源连接配置文件连接到目标位置连接配置文件。

  5. 启动 Dataflow 流水线,开始将捕获的数据注入到与 MongoDB 兼容的 Firestore 数据库中。

  6. 监控数据流,以确定迁移过程中的重要里程碑,从而确定数据传输期间是否遇到任何错误。

  7. 在适当的时候,关闭对源数据库的写入流量。在所有数据(包括最近的更改)都复制到具有 MongoDB 兼容性的 Firestore 数据库后,将读取流量重定向到新目标。

  8. 启用对具有 MongoDB 兼容性的 Firestore 数据库的写入流量。

关于代码示例

本指南中的代码示例应按顺序执行。本指南假定您通过预先设置所有环境变量来配置环境。之后,您需要执行迁移所需的命令,这些命令会使用已配置的环境变量。我们建议使用此方法。由于许多命令使用相同的环境变量,因此您可以降低在迁移过程的不同阶段引入错误的可能性。

或者,您也可以将命令示例中的变量替换为为相应环境变量设置的相同值。

限制

与 MongoDB 兼容的 Firestore 具有以下限制:

  • Firestore 不支持以下 BSON 类型:

    • 未定义
    • DBPointer
    • JavaScript
    • 符号
  • Firestore 对 _id 字段有以下限制:

    • 支持文档 _id 字段中的 ObjectID、Long 和 String。
    • 不支持将 0L 用作 _id
  • Firestore 的文档大小上限为 4MB。

如果您的任何数据包含所列条件:

  • 建议您在开始迁移流程之前,先在数据集中解决这些情况。

  • 如果您选择在不进行更改的情况下继续操作,那么受限制影响的文档将无法写入 Firestore,并且会被搁置。 您可以决定如何处理这些文件。如果这些文件转换为受支持的类型、值或大小,则可以重新处理。

Datastream 具有以下要求:

  • Datastream 支持的最低 MongoDB 主要版本为 4.0。对于某些次要版本,存在支持的最低补丁版本:

    • 4.0.21
    • 4.2.10
    • 4.4.2
  • 您的 MongoDB 集群必须支持变更数据流。您的 MongoDB 部署必须配置为副本集分片集群,才能启用更改流。

后续步骤

继续配置资源以进行迁移