从标准版迁移到企业版

如需将数据从 Firestore 标准版数据库迁移到 Firestore 企业版数据库,我们建议使用以下选项之一:

  • 导入和导出功能。导入操作生成的数据文件与企业版和标准版均兼容。

  • firestore-to-firestore Dataflow 模板。 借助 Dataflow 服务,您可以构建数据流水线,而 firestore-to-firestore 模板会在 Cloud Firestore 数据库之间创建批量流水线。

导入和导出是更简单的运行选项,配置选项更少。

Dataflow 模板具有更高的可自定义性。 您可以扩展模板代码以执行部分迁移或转换数据。您还可以控制工作器数量和大小。

这两个选项都支持跨项目和区域的迁移。

使用导出和导入迁移数据

如需使用导出和导入操作迁移数据,请参阅 导出和导入数据。 如需将数据移动到另一个项目中的数据库,请参阅 在项目之间移动数据

使用 Dataflow 模板迁移数据

按照以下说明使用 firestore-to-firestore Dataflow 模板迁移数据。

准备工作

  1. 在开始数据迁移之前,请确保源数据库已启用 时间点恢复 (PITR)Dataflow 作业使用 PITR 在 PITR 时间戳处读取数据。如果 PITR 已停用,则作业运行时间超过一小时后会失败。

  2. 分配下一部分中所述的必需角色。

所需的角色

如需将数据从一个数据库迁移到另一个数据库,请分配以下角色。 您也可以通过自定义角色或其他预定义角色来获取所需的权限:

  1. 如需获得创建新数据库和访问 Cloud Firestore数据所需的权限,请让您的管理员为您授予项目的 Cloud Datastore Owner (roles/datastore.owner) 身份和访问权限管理 (IAM) 角色。
  2. 如需向 Dataflow 作业授予对 Cloud Firestore 数据库的读取和写入权限,请为 Dataflow 工作器 服务账号 (例如 PROJECT_NUMBER-compute@) 分配项目的 Cloud Datastore Userroles/datastore.user)IAM 角色。

    如需详细了解 Dataflow 安全性,请参阅 Dataflow 安全性和权限

如需详细了解如何授予 IAM 角色, 请参阅 管理对项目、文件夹和组织的访问权限

1. 创建新的 Firestore 企业版数据库

如需将数据从标准版数据库迁移到企业版数据库,您必须先创建企业版目标数据库。请参阅 创建数据库

2. 运行 Dataflow firestore-to-firestore 模板

使用 firestore-to-firestore 模板配置和运行您的 Dataflow 作业。 该模板支持迁移整个数据库或仅迁移指定的集合组。

限制

请注意 firestore-to-firestore Dataflow 模板的以下限制:

  • 源数据库必须是标准版数据库。
  • 迁移会在特定读取时间读取数据。我们建议在源数据库中启用 时间点恢复 (PITR)。如果未启用 PITR,数据会在一小时后过期,这可能不足以完成数据迁移。 PITR 会将数据保留期限延长至 7 天。
  • 索引不会迁移。
  • Dataflow 作业不会迁移数据库配置,例如 生存时间 (TTL) 政策、备份、PITR 和 客户管理的加密密钥 (CMEK)。

    您必须在新数据库上配置这些设置。如需提高数据迁移速度,请等到迁移完成后再在目标数据库上配置 TTL、备份和 PITR。

以下示例演示了如何使用 Google Cloud CLI运行模板。

迁移所有数据

如需迁移所有数据,请使用以下命令:

gcloud dataflow flex-template run "JOB_NAME" \
  --project "PROJECT" \
  --template-file-gcs-location gs://dataflow-templates-REGION_NAME/VERSION/flex/Cloud_Firestore_to_Firestore \
  --region REGION_NAME \
  --parameters "sourceProjectId=SOURCE_PROJECT_ID" \
  --parameters "sourceDatabaseId=SOURCE_DATABASE_ID" \
  --parameters "destinationProjectId=DESTINATION_PROJECT_ID" \
  --parameters "destinationDatabaseId=DESTINATION_DATABASE_ID" \
  --parameters "readTime=READ_TIME"

替换以下内容:

  • JOB_NAME:作业的名称。
  • PROJECT:您的 Google Cloud 项目的 ID。
  • REGION_NAME:您要在其中运行 Dataflow 作业的 Google Cloud 位置 。请使用靠近数据库的位置。
  • VERSION:您要使用的模板的版本。您可使用以下值:

  • SOURCE_PROJECT_ID:包含 Firestore 标准版数据库的源 Google Cloud 项目的 ID。

  • SOURCE_DATABASE_ID:源 Cloud Firestore 数据库的 ID。

  • DESTINATION_PROJECT_ID:新 Cloud Firestore 数据库的目标 Google Cloud 项目的 ID。

  • DESTINATION_DATABASE_ID:目标 Cloud Firestore 数据库的 ID。

  • READ_TIME:从源数据库读取数据的时间戳。设置为 RFC 3339 格式的时间戳,精确到分钟,例如 2026-05-15T16:31:00.00Z

    最早的有效时间戳取决于您的时间点恢复 (PITR) 设置。请参阅获取最早的版本时间

迁移指定的集合组

如需仅迁移某些集合组,请使用以下命令:

gcloud dataflow jobs run "JOB_NAME" \
  --project "PROJECT" \
  --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Cloud_Firestore_to_Firestore \
  --region REGION_NAME \
  --parameters "sourceProjectId=SOURCE_PROJECT_ID" \
  --parameters "sourceDatabaseId=SOURCE_DATABASE_ID" \
  --parameters "collectionGroupIds=COLLECTION_GROUP_IDS" \
  --parameters "destinationProjectId=DESTINATION_PROJECT_ID" \
  --parameters "destinationDatabaseId=DESTINATION_DATABASE_ID" \
  --parameters "readTime=READ_TIME"

替换以下内容:

  • JOB_NAME:作业的名称。
  • PROJECT:您的 Google Cloud 项目的 ID。
  • REGION_NAME:您要在其中运行 Dataflow 作业的 Google Cloud 位置 。请使用靠近数据库的位置。
  • VERSION:您要使用的模板的版本。您可使用以下值:

  • SOURCE_PROJECT_ID:包含 Google Cloud 项目的 ID,其中包含 Firestore 标准版数据库。

  • SOURCE_DATABASE_ID:源 Cloud Firestore 数据库的 ID。

  • COLLECTION_GROUP_IDS:要迁移的集合组 ID 的英文逗号分隔列表。

    子集合不会以递归方式包含在内。例如,如果您指定 users 集合组,则迁移不会包含 messages 子集合,除非您还指定了 messages 集合组。/users/userid/messages

  • DESTINATION_PROJECT_ID:新 Cloud Firestore 数据库的目标 Google Cloud 项目的 ID。

  • DESTINATION_DATABASE_ID:目标 Cloud Firestore 数据库的 ID。

  • READ_TIME:从源数据库读取数据的时间戳。设置为 RFC 3339 格式的时间戳,精确到分钟,例如 2026-05-15T16:31:00.00Z

    最早的有效时间戳取决于您的时间点恢复 (PITR) 设置。请参阅获取最早的版本时间

3. 配置数据库

firestore-to-firestore 作业仅迁移数据。索引和其他数据库设置不会迁移 。除了迁移数据之外,您还可以考虑在新数据库上配置以下内容:

配置数据库后,您可以继续使用新数据库测试应用。如需完成迁移,请更新应用以使用新数据库。

问题排查

对于大型数据库,如果作业一次读取的数据过多,可能会失败。 解决方法:

后续步骤