从标准版迁移到企业版
如需将数据从 Firestore 标准版数据库迁移到 Firestore 企业版数据库,我们建议使用以下选项之一:
导入和导出功能。导入操作中的数据文件与企业版和标准版均兼容。
firestore-to-firestoreDataflow 模板。 借助 Dataflow 服务,您可以构建数据流水线,而firestore-to-firestore模板可在 Firestore 数据库之间创建批处理流水线。
导入和导出是更简单的运行选项,配置选项更少。
Dataflow 模板更具可自定义性。 您可以扩展模板代码以执行部分迁移或转换数据。您还可以控制工作器的数量和大小。
这两种方案都支持跨项目和区域迁移。
通过导出和导入迁移数据
如需通过导出和导入操作迁移数据,请参阅导出和导入数据。如需将数据移动到其他项目中的数据库,请参阅在项目之间移动数据。
使用 Dataflow 模板迁移数据
按照以下说明使用 firestore-to-firestore Dataflow 模板迁移数据。
准备工作
在开始数据迁移之前,请确保源数据库已启用时间点恢复 (PITR)。Dataflow 作业使用 PITR 在 PITR 时间戳读取数据。如果停用了 PITR,作业的运行时间超过 1 小时,则会失败。
必须启用
datastore.googleapis.comAPI 才能使用此模板。分配下一部分中所述的必需角色。
所需的角色
如需将数据从一个数据库迁移到另一个数据库,请分配以下角色。 您也可以通过自定义角色或其他预定义角色来获取所需的权限:
- 如需获得创建新数据库和访问 Firestore 数据所需的权限,请让您的管理员为您授予项目的 Cloud Datastore Owner (
roles/datastore.owner) Identity and Access Management (IAM) 角色。 -
如需向 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:您要使用的模板的版本。您可使用以下值: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:源 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:您要使用的模板的版本。您可使用以下值: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:源 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 作业仅迁移数据。
索引和其他数据库设置不会迁移。除了迁移数据之外,还应考虑在新数据库中配置以下内容:
索引:Firestore 企业版数据库并非必须使用索引才能运行查询,并且默认情况下不会自动创建索引。如需为查询创建索引,请参阅以下内容:
- Firestore 企业版索引概览。
- 通过索引优化查询性能。
- 您可以使用 Firebase CLI 导出索引并将其部署到新数据库。
- 使用 Query Insights 识别可通过索引优化的查询。
TTL:创建 TTL 政策。
备份:设置备份。
PITR:启用 PITR。
配置数据库后,您可以继续使用新数据库测试应用。如需完成迁移,请更新应用以使用新数据库。
问题排查
对于大型数据库,如果作业一次读取的数据过多,可能会失败。解决方法:
增加
maxNumWorkers值。
后续步骤
- 了解如何使用流水线操作查询数据。
- 了解如何优化 Firestore 企业版中的查询
- 了解企业版数据库的扩缩方式。