创建新的 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 模式数据库都遵循相同的价格结构,并且位于相同位置。如需详细了解价格和位置,请参阅以下页面:
原生模式 Firestore
Datastore 模式 Firestore
选择数据库模式
创建新的 Firestore 数据库时,必须选择数据库模式。 您可以在同一项目中同时拥有 Datastore 模式数据库和原生模式数据库,但每个数据库都只能采用一种类型。选择数据库模式时,建议采用以下方法:
为新的服务器项目使用 Datastore 模式 Firestore。
借助 Datastore 模式 Firestore,您可以使用成熟的 Datastore 服务器架构,同时还可摆脱基本的 Datastore 限制。Datastore 模式可以自动扩容为每秒数百万次写入。
为新的移动应用和 Web 应用使用原生模式 Firestore。
Firestore 可为移动和 Web 客户端库提供实时离线功能。原生模式可以自动扩容为数百万个并发客户端。
特性比较
下表比较了两种数据库模式的系统行为:
原生模式 Firestore |
Datastore 模式 Firestore |
|
---|---|---|
数据模型 | 以文档和集合的形式整理文档数据库。 | 以种类和实体组的形式整理实体。 |
存储层 | 具有强一致性的存储层。 | 具有强一致性的存储层。 |
查询和事务 |
|
|
Datastore v1 API 支持 | 否,请求会被拒绝 | 是 |
Firestore v1 API 支持 | 是 | 否,请求会被拒绝 |
实时更新 |
在侦听一个文档或一组文档时,您的客户端会收到有关任何数据更改的通知,并会收到最新的数据集。 |
不支持 |
离线数据持久化 | 移动和网页客户端库支持离线数据持久化。 | 不支持 |
客户端库 |
Firestore 客户端库:
|
Datastore 客户端库:
|
安全性 |
|
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 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 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