选择原生模式或 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 控制台数据存储区查看器
命名空间 不支持 支持命名空间
App Engine 客户端库集成

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

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

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

在所有运行时中都受支持

创建新数据库

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

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

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

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

将数据库更改为原生模式

gcloud

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

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 database 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