选择原生模式或 Datastore 模式

创建新的 Firestore 数据库时,您可以将数据库实例配置为以 Datastore 模式运行,从而使数据库能够向后兼容 Datastore。本页介绍了以下 Firestore 数据库模式之间的差异:原生模式和 Datastore 模式。

原生模式 Firestore

Firestore 是 Datastore 的下一代主要版本,也是对该产品的一次品牌重塑。Firestore 是一个 NoSQL 文档数据库,其设计支持自动扩缩、具备出色的性能,并且易于进行应用开发;它结合了 Datastore 和 Firebase 实时数据库两者各自的优点。

Firestore 引入了以下功能:

  • 具有强一致性的存储层
  • 集合和文档数据模型
  • 实时更新
  • 移动和 Web 客户端库

虽然 Firestore 向后兼容 Datastore,但新数据模型、实时更新以及移动和 Web 客户端库功能无法向后兼容。如需访问所有 Firestore 功能,您必须使用原生模式 Firestore。

Datastore 模式 Firestore

Datastore 模式 Firestore 遵循 Datastore 系统行为,但使用 Firestore 的存储层,因而摆脱了以下 Datastore 限制:

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

Datastore 模式会停用与 Datastore 不兼容的 Firestore 功能:

  • 该项目将接受 Datastore API 请求,并拒绝 Firestore API 请求。
  • 该项目将使用 Datastore 索引,而不是 Firestore 索引。
  • 您可以将 Datastore 客户端库用于该项目,但不能将 Firestore 客户端库用于该项目。
  • Firestore 实时功能将无法使用。
  • 在 Google Cloud 控制台中,数据库将使用 Datastore 查看器。

自动升级为 Datastore 模式

现有 Datastore 数据库将自动升级为 Datastore 模式 Firestore。需要 Datastore 数据库的新项目应使用 Datastore 模式 Firestore。

价格和位置

原生模式数据库和 Datastore 模式数据库都遵循相同的价格结构,并且位于相同位置。如需详细了解价格和位置,请参阅以下页面:

原生模式 Firestore

Datastore 模式 Firestore

选择数据库模式

创建新的 Firestore 数据库时,必须选择数据库模式。 您可以在同一个项目中同时使用 Datastore 模式数据库和原生模式数据库。 但每个数据库都只属于一种类型 选择数据库模式时,建议采用以下方法:

  • 为新的服务器项目使用 Datastore 模式 Firestore。

    借助 Datastore 模式 Firestore,您可以使用成熟的 Datastore 服务器架构,同时还可摆脱基本的 Datastore 限制。Datastore 模式可以自动扩容为每秒数百万次写入。

  • 为新的移动应用和 Web 应用使用原生模式 Firestore。

    Firestore 可为移动和 Web 客户端库提供实时离线功能。原生模式可以自动扩容为数百万个并发客户端。

特性比较

下表比较了两种数据库模式的系统行为:

原生模式
Firestore
Datastore 模式
Firestore
数据模型 以文档和集合的形式整理文档数据库。 以种类和实体组的形式整理实体。
存储层 具备强一致性的存储层。 具有强一致性的存储层。
查询和事务
  • 整个数据库保持高度一致的查询
  • 摆脱了 Datastore 以前的一致性限制
  • 整个数据库保持高度一致的查询
  • 事务可以访问任意数量的实体组
Datastore v1 API 支持 否,请求会被拒绝
Firestore v1 API 支持 否,请求会被拒绝
实时更新

支持侦听一个文档或一组文档以进行实时更新。

在侦听一个文档或一组文档时,您的客户端会收到有关任何数据更改的通知,并会收到最新的数据集。

不支持
离线数据持久化 移动和网页客户端库支持离线数据持久化。 不支持
客户端库 Firestore 客户端库:
  • Java
  • Python
  • PHP
  • Go
  • Ruby
  • C#
  • Node.js
  • Android
  • iOS+
  • Web
  • C++
  • Unity
Datastore 客户端库:
  • Java
  • Python
  • PHP
  • Go
  • Ruby
  • C#
  • Node.js
  • C++
安全性
  • Identity and Access Management (IAM) 管理数据库访问权限
  • Firestore 安全规则支持移动和 Web 客户端库的无服务器身份验证及授权
IAM 管理数据库访问权限
性能 自动扩容为数百万个并发客户端。 自动扩容为每秒数百万次写入。
服务等级协议 (SLA) Firestore SLA Firestore SLA
位置

这两种模式支持相同的位置。如需查看详细的位置列表,请参阅以下页面:

价格

这两种模式为实体和文档操作使用相同的价格结构。

Datastore 模式 Firestore 不会对小规模操作收费。

这两种模式对存储的数据和网络带宽使用相同的价格结构。

如需详细了解价格,请参阅以下页面:

控制台 Firebase 控制台和 Google Cloud 控制台 Firestore 查看器 Google Cloud 控制台 Datastore 查看器
命名空间 不支持 支持命名空间
App Engine 客户端库集成

在 App Engine 标准环境 Python 2.7 和 PHP 5.5 运行时中不受支持

App Engine 标准环境的所有其他运行时中都受支持

App Engine 柔性环境的所有运行时中都受支持

在所有运行时中都受支持

创建一个新数据库

您可以在原生模式或 Datastore 模式下创建新的 Firestore 数据库。此选择不取决于项目中任何现有数据库的模式。

如需了解详情,请参阅创建和管理数据库

在原生模式和 Datastore 模式之间切换

如果数据库为空,您可以在原生模式和 Datastore 模式之间切换。

将数据库更改为原生模式

gcloud

使用 gcloud firestore 个数据库更新命令将您的数据库更改为原生模式。

gcloud firestore databases update --type=firestore-native --database='DATABASE_ID'

DATABASE_ID 替换为您的数据库 ID。

rest

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

替换以下内容:

  • PROJECT_ID:项目 ID
  • DATABASE_ID:数据库 ID

将数据库更改为 Datastore 模式

gcloud

使用 gcloud firestore databases update 命令将数据库更改为 Datastore 模式。

 gcloud firestore databases update --type=datastore-mode --database='DATABASE_ID'

DATABASE_ID 替换为您的数据库 ID。

rest

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

替换以下内容:

  • PROJECT_ID:项目 ID
  • DATABASE_ID:数据库 ID