如需将数据从 Firestore 标准版数据库迁移到 Firestore 企业版数据库,我们建议使用以下选项之一:
导入和导出功能。导入操作生成的数据文件与企业版和标准版均兼容。
firestore-to-firestoreDataflow 模板。 借助 Dataflow 服务,您可以构建数据流水线,而firestore-to-firestore模板会在 Cloud Firestore 数据库之间创建批量流水线。
导入和导出是更简单的运行选项,配置选项更少。
Dataflow 模板具有更高的可自定义性。 您可以扩展模板代码以执行部分迁移或转换数据。您还可以控制工作器数量和大小。
这两个选项都支持跨项目和区域的迁移。
使用导出和导入迁移数据
如需使用导出和导入操作迁移数据,请参阅 导出和导入数据。 如需将数据移动到另一个项目中的数据库,请参阅 在项目之间移动数据。
使用 Dataflow 模板迁移数据
按照以下说明使用
firestore-to-firestore Dataflow 模板迁移数据。
准备工作
在开始数据迁移之前,请确保源数据库已启用 时间点恢复 (PITR) 。Dataflow 作业使用 PITR 在 PITR 时间戳处读取数据。如果 PITR 已停用,则作业运行时间超过一小时后会失败。
分配下一部分中所述的必需角色。
所需的角色
如需将数据从一个数据库迁移到另一个数据库,请分配以下角色。 您也可以通过自定义角色或其他预定义角色来获取所需的权限:
- 如需获得创建新数据库和访问
Cloud Firestore数据所需的权限,请让您的管理员为您授予项目的
Cloud Datastore Owner
(
roles/datastore.owner) 身份和访问权限管理 (IAM) 角色。 -
如需向 Dataflow 作业授予对 Cloud Firestore 数据库的读取和写入权限,请为 Dataflow 工作器 服务账号 (例如
PROJECT_NUMBER-compute@) 分配项目的 Cloud Datastore User (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:您要使用的模板的版本。您可使用以下值:latest,以使用模板的最新版本,该模板在存储分区的未标示日期父文件夹 (gs://dataflow-templates-REGION_NAME/latest/) 中可用- 版本名称(如
2023-09-12-00_RC00),以使用模板的特定版本 ,该版本嵌套在存储分区的相应日期 父文件夹 (gs://dataflow-templates-REGION_NAME/) 中
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:您要使用的模板的版本。您可使用以下值:latest,以使用模板的最新版本,该模板在 存储分区的 未标示日期的 父文件夹 ( gs://dataflow-templates-REGION_NAME/latest/) 中可用- 版本名称(如
2023-09-12-00_RC00),以使用模板的特定版本,该版本嵌套在存储分区的相应日期父文件夹 (gs://dataflow-templates-REGION_NAME/) 中
SOURCE_PROJECT_ID:包含 Google Cloud 项目的 ID,其中包含 Firestore 标准版数据库。SOURCE_DATABASE_ID:源 Cloud Firestore 数据库的 ID。COLLECTION_GROUP_IDS:要迁移的集合组 ID 的英文逗号分隔列表。子集合不会以递归方式包含在内。例如,如果您指定
users集合组,则迁移不会包含messages子集合,除非您还指定了messages集合组。/users/userid/messagesDESTINATION_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 作业仅迁移数据。索引和其他数据库设置不会迁移 。除了迁移数据之外,您还可以考虑在新数据库上配置以下内容:
索引:Firestore 企业版数据库并非严格要求运行查询的索引,并且默认情况下不会创建自动索引。如需为查询创建索引,请参阅以下内容:
- Firestore 企业版索引概览。
- 使用索引优化查询性能。
- 您可以使用 Firebase CLI 导出索引并将其部署到新数据库。
- 使用 Query Insights 识别可以使用索引优化的查询。
TTL:创建 TTL 政策。
备份:设置备份。
PITR:启用 PITR。
配置数据库后,您可以继续使用新数据库测试应用。如需完成迁移,请更新应用以使用新数据库。
问题排查
对于大型数据库,如果作业一次读取的数据过多,可能会失败。 解决方法:
增加
maxNumWorkers值。
后续步骤
- 了解如何使用 流水线操作查询数据。
- 了解如何在 Firestore 企业版中优化查询
- 了解企业版数据库的扩缩方式。