从标准版迁移到企业版

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

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

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

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

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

这两种方案都支持跨项目和区域迁移。

通过导出和导入迁移数据

如需通过导出和导入操作迁移数据,请参阅导出和导入数据。如需将数据移动到其他项目中的数据库,请参阅在项目之间移动数据

使用 Dataflow 模板迁移数据

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

准备工作

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

  2. 必须启用 datastore.googleapis.com API 才能使用此模板。

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

所需的角色

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

  1. 如需获得创建新数据库和访问 Firestore 数据所需的权限,请让您的管理员为您授予项目的 Cloud Datastore Owner (roles/datastore.owner) Identity and Access Management (IAM) 角色。
  2. 如需向 Dataflow 作业授予对 Firestore 数据库的读取和写入权限,请向 Dataflow 工作器服务账号(例如 PROJECT_NUMBER-compute@)授予项目中的 Cloud Datastore 用户 (roles/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:源 Firestore 数据库的 ID。

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

  • DESTINATION_DATABASE_ID:目标 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:包含 Firestore 标准版数据库的源 Google Cloud 项目的 ID。

  • SOURCE_DATABASE_ID:源 Firestore 数据库的 ID。

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

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

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

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

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

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

3. 配置数据库

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

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

问题排查

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

后续步骤