自动升级为 Firestore

本页面介绍从 Cloud Datastore 到 Datastore 模式 Firestore 的升级路径。

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

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

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

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

自动升级为 Datastore 模式 Firestore

如果您管理的是使用 Cloud Datastore 的应用,则无需更新应用代码。届时我们将通知您,以便安排将您的应用升级为 Datastore 模式 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 中的数据进行比较,在 Datastore 模式 Firestore 中重新验证数据。

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 用量。

交易

Cloud Datastore 数据库对 Datastore 模式 Firestore 中的事务使用乐观并发。乐观并发控制保留了 Cloud Datastore 中事务的现有行为。

对于 Datastore 模式 Firestore 中的事务,之前迁移且活动很少的一些数据库使用悲观锁定进行迁移,而不是使用乐观并发。

如需在迁移期间或迁移之后验证数据库的并发模式,请检查 PREPARE 阶段的日志

日志记录和进度通知

升级过程使用 Cloud Logging 发布进度更新。如需查看日志,请使用日志浏览器Cloud Logging APICloud SDK

更新会发布到 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 日志即会更新。

如需在升级过程中接收通知,您可以根据两个日志创建基于日志的指标,然后根据这些指标创建提醒

Cloud Monitoring 指标

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