自动升级为 Firestore

本页面介绍从旧版 Cloud Datastore 升级到 Datastore 模式 Firestore。

Firestore 可以在 Datastore 模式下运行,这样能够向后兼容 使用旧版 Cloud Datastore借助 Datastore 模式 Firestore,您可以访问 Firestore 经过改进的存储层,同时保留 Datastore 的系统行为。Datastore 模式 Firestore 移除了以下旧版 Cloud Datastore 限制:

  • 查询不再具有最终一致性。除非您明确请求最终一致性,否则查询将变得高度一致。
  • 事务中的查询不再需要是祖先查询1
  • 事务不再限于 25 个实体组1
  • 对实体组的写入不再限于每秒 1 次1

如需详细了解 Datastore 模式,请参阅 Datastore 模式 Firestore

自 2021 年 6 月起,从旧版 Cloud Datastore 到 Datastore 模式 Firestore 的迁移 。迁移从流量非常低的数据库开始,并且将在未来几个月内扩展到流量更高的数据库。

1 迁移到 Optimistic With 实体群组并发模式仍受 25 个实体组的约束 事务限制以及 Datastore 模式 Firestore 的每秒 1 次写入限制。 事务中的查询必须是祖先查询。如需了解详情,请参阅“乐观并发模式(使用实体组)”部分

自动升级为 Datastore 模式 Firestore

如果您管理使用旧版 Cloud Datastore 的应用,则无需 更新应用代码。届时我们将通知您,以便安排将您的应用升级为 Datastore 模式 Firestore。升级不需要停机。

如果您对自动升级流程还有其他疑问,请通过支持渠道与我们联系。

查看数据库类型

您可以使用 gcloud alpha firestore databases describe 命令查看数据库类型。查看是否存在 type 字段 在输出中:

  • type: DATASTORE_MODE

    数据库类型为 Datastore 模式 Firestore。无需升级或已完成升级。

  • 输出中不存在“type

    数据库类型为旧版 Cloud Datastore。通过 数据库将升级为 Datastore 模式 Firestore。

  • type: FIRESTORE_NATIVE

    数据库类型为原生模式下的 Firestore。

升级阶段

概括来讲,我们会按照此流程 从旧版 Cloud Datastore 数据库复制到 Datastore 模式 Firestore。此过程不需要应用停机时间:

  1. 将新的 Datastore 模式 Firestore 数据副本添加到现有 旧版 Cloud Datastore 数据库。将实体写入操作异步复制到 Datastore 模式 Firestore。

  2. 从旧版 Cloud Datastore 中复制现有数据和索引条目 Datastore 模式下的 Firestore。复制后,验证该数据。

  3. 将实体读取操作直接重定向到 Datastore 模式 Firestore。首先重定向最终一致的读取,然后重定向高度一致的读取。

  4. 将实体写入和事务读取直接重定向到 Datastore 模式 Firestore。

此过程包含以下阶段。

1.同步应用写入

在此阶段,写入会同步应用到旧版 Cloud Datastore:写入 在对实体和索引应用所有更改之前,不会报告成功 至少一个副本。这模拟了 Datastore 模式 Firestore 的行为,该模式也会同步应用写入(与在提交后异步应用写入的旧版 Cloud Datastore 默认行为不同)。

此阶段的目的是升级前显示在 Datastore 模式 Firestore 中同步应用的任何延迟影响。在迁移期间和迁移之后,同步应用写入将继续。

活动极少的数据库会跳过此阶段。为了确定 此阶段已包含在数据库升级过程中,请检查 [日志] 适用于 APPLY_WRITES_SYNCHRONOUSLY 阶段。

2. 复制并验证

此阶段表示迁移的开始。此阶段引入了 Datastore 模式 Firestore 副本并执行以下步骤:

  1. 日志

    对旧版 Cloud Datastore 的实体写入操作也开始流经 通过旁路连接到 Datastore 模式 Firestore 副本。它是旧版 Cloud Datastore 现有复制系统的一部分。这些写入操作不会影响写入延迟时间。Datastore 模式 Firestore 副本会缓冲这些写入操作,以在复制步骤完成后应用。

  2. 复制

    在 Datastore 模式 Firestore 副本中,创建现有数据和索引条目的离线副本。复制步骤不会影响 旧版 Cloud Datastore 操作。此步骤可能持续几天。

  3. 排空日志

    将来自日志步骤的写入应用到离线副本的数据。

  4. 验证数据

    通过与 存储在旧版 Cloud Datastore 中。

3. 重定向最终一致性读取

从以下来源提供最终一致的读取(没有祖先过滤器的查询) Datastore 模式 Firestore。旧版 Cloud Datastore 读取语义 仍然适用:

  • 祖先查询具有高度一致性。
  • 非祖先查询具有最终一致性。
  • 查询具有高度一致性(明确配置以进行最终一致性的查询除外)。

Datastore 模式 Firestore 继续充当副本 旧版 Cloud Datastore 数据的存储

4. 重定向高度一致性读取

从 Datastore 模式 Firestore 提供高度一致性(非事务性)读取。请注意,读取的旧版 Cloud Datastore 语义仍然适用。即使读取操作直接来自 Firestore,Firestore 仍然依赖于旧版 Cloud Datastore 来确保它始终具备高度一致性读取。

5. 重定向写入

将实体写入和事务读取重定向到 Datastore 模式 Firestore。针对同一实体进行的并发修改将继续导致事务中止。对同一实体组中不同实体的并发修改不再导致事务中止。

在此阶段开始时,Datastore 模式 Firestore 仍然依赖于 旧版 Cloud Datastore,以保证其在每次写入前都处于最新状态。在 最后遍历,确保所有先前的写入 已应用,Datastore 模式 Firestore 会停止查询 旧版 Cloud Datastore

6. 迁移已完成

现在,用于读取操作的 Datastore 模式 Firestore 的语义均适用:所有查询均具有高度一致性。

价格保持不变,但您的结算现在会列出 Firestore SKU。“App Engine 配额”页面开始显示 Firestore 使用量 而不是旧版 Cloud Datastore

交易

Datastore 模式 Firestore 支持三种并发模式:

  • 乐观

    大多数旧版 Cloud Datastore 数据库将使用乐观并发机制 Datastore 模式 Firestore 中的事务。乐观并发机制可以保留 旧版 Cloud Datastore 中事务的现有行为。

  • 对实体群组持乐观态度

    依赖于实体群组的数据库 事务语义将迁移到这种并发模式。如需了解详情,请参阅“使用实体组的乐观并发”模式部分。

  • Pessimistic

    之前迁移过的一些活动极少的数据库已迁移 为 Datastore 模式 Firestore 中的事务设置悲观锁定

可通过 Firestore 访问并发模式 projects.databases REST 资源:

curl -X GET -H "Authorization: Bearer "$(gcloud auth print-access-token) \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases"

您还可以通过检查 PREPARE 阶段的日志来查找并发模式。

使用实体组并发模式实现乐观

如需消除 Optimistic With Entity Groups 的查询、事务和写入吞吐量限制, 请将项目的并发模式更改为 乐观。要确保此更改与您的项目兼容,请执行以下操作:

  1. 在 Datastore 模式下的 Firestore 中创建测试项目。

  2. 更改测试项目的并发设置 模式更改为 OPTIMISTIC。发出 HTTP 补丁 如下所示。

  3. 对测试项目运行测试,以确保您的工作负载 在没有 Entity 群组的情况下运行正常。

  4. 将主项目的并发模式从 OPTIMISTIC_WITH_ENTITY_GROUPS 更改为 OPTIMISTIC

用于更改数据库并发模式的 HTTP PATCH 请求:

curl --request PATCH \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"concurrencyMode":"OPTIMISTIC"}' \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/(default)?updateMask=concurrencyMode"

日志记录和进度通知

升级过程使用 Cloud Logging 发布进度更新。查看 使用日志浏览器Cloud Logging APIGoogle Cloud CLI

更新已发布到 datastore.googleapis.com 日志记录服务名称下有两个日志

日志名称 受监控的资源 载荷
migration_state datastore_database type.googleapis.com/google.datastore.admin.v1.MigrationStateEvent
migration_progress datastore_database type.googleapis.com/google.datastore.admin.v1.MigrationProgressEvent

如果升级的整体状态(RUNNINGCOMPLETE)发生变化,则 migration_state 日志会更新。

每次升级进入新阶段(PREPARESTARTAPPLY_WRITES_SYNCHRONOUSLYCOPY_AND_VERIFYREDIRECT_EVENTUALLY_CONSISTENT_READSREDIRECT_STRONGLY_CONSISTENT_READSREDIRECT_WRITES)时,migration_progress 日志即会更新。

若要在升级过程中接收通知,您可以 创建基于日志的指标 日志和 根据以下内容创建提醒: 这些指标

Google Cloud 控制台中的迁移横幅

当您的旧版 Cloud Datastore 数据库处于迁移过程中时, Datastore Studio 页面中将会显示信息横幅, Google Cloud 控制台此横幅包含用于打开 Cloud Logging 的链接和获取迁移更新的过滤器。

  1. 在 Google Cloud 控制台中,转到数据库页面。

    前往“数据库”

  2. 从数据库列表中选择所需的数据库。

  3. 在导航菜单中,点击 Datastore Studio

在 CLI 上查看当前状态

如需快速查看迁移的当前状态,请使用以下 gcloud 命令:

gcloud datastore operations describe datastore-firestore-migration

正在暂停迁移

大型数据库迁移可以暂停和恢复。暂停 迁移过程会阻止项目进入下一阶段, 已恢复。暂停迁移可能有助于您确定 迁移过程或迁移作业的结果, 是不相关的因素。

收到有关数据库迁移的电子邮件通知后, 可通过运行暂停命令来检查广告素材是否符合暂停和恢复条件 命令。如果迁移不符合条件,则会返回一个错误,指明该功能不可用。

如果您的数据库迁移符合暂停和恢复的条件,则在迁移到 START 阶段后,以下命令将开始生效。

要暂停迁移,请执行以下操作:

curl --request POST \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{}' \
"https://datastore.googleapis.com/v1/projects/PROJECT_ID:pauseMigration"

如需继续迁移,请执行以下操作:

curl --request POST \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{}' \
"https://datastore.googleapis.com/v1/projects/PROJECT_ID:resumeMigration"

迁移完成后,这些命令将不起作用。

如果您需要将迁移暂停超过一周,请通过支持渠道与我们联系。两周后 系统可能会自动继续进行迁移

Cloud Monitoring 指标

Datastore 数据库可用的 Cloud Monitoring 指标在整个升级过程中保持不变,请参阅可用的 Datastore 指标