- 原子事务:执行一组操作,要么全部成功,要么全部失败。
- 读写操作的高可用性:数据库在 Google 数据中心运行,该数据中心使用冗余来尽可能减少故障点的影响。
- 可大规模伸缩,且性能出色:分布式架构可自动管理伸缩,并在高负载下保持性能。
- 灵活的数据存储和查询:文档数据模型可自然地映射到面向对象的语言和脚本语言,并通过多个客户端向应用公开。Firestore 的 Datastore 兼容型 API 还提供了一种类似于 SQL 的查询语言。
- 强一致性:查询具有强一致性。
- 静态数据加密:数据在写入磁盘之前会自动加密,在授权用户读取时会自动解密。如需了解详情,请参阅服务器端加密。
- 完全托管,无计划内停机时间:Google 负责管理服务,以便您可以专注于自己的应用。在服务进行计划内升级时,您的应用仍然可以使用 Firestore。
与关系型数据库的比较
虽然 Datastore 界面具有许多与关系型数据库类似的功能,但作为 NoSQL 数据库,它在描述数据对象间关系的方式方面有所不同。以下是 Datastore 与关系型数据库在概念方面的简要对比:
| 概念 | Datastore | Firestore | 关系型数据库 |
|---|---|---|---|
| 对象类别 | 种类 | 集合组 | 表格 |
| 一个对象 | 实体 | 文档 | 行 |
| 一个对象的单个数据 | 属性 | 字段 | 列 |
| 对象的唯一 ID | 键 | 文档 ID | 主键 |
与关系型数据库表中的行不同,相同种类的 Datastore 实体可以具有不同的属性,并且不同的实体可以具有名称相同但值类型不同的属性。您可以利用这些独有的特点来设计和管理数据,以实现自动扩缩。
由于所有查询都由之前构建的索引提供服务,因此 Datastore API 可以执行的查询类型比 SQL 关系型数据库允许的查询类型更受限制。具体来说,Datastore 不支持联接操作、对多个属性的不等性过滤,也不支持基于子查询的结果对数据进行过滤。如果您的应用需要高级查询功能(包括联接和子查询),请考虑使用 Firestore Native API 或 MongoDB 兼容 API。
与强制执行某种架构的关系型数据库不同,Datastore 是无架构的。它不要求相同种类的实体拥有一致的属性集(但您可以选择在自己的应用代码中强制执行这样的要求)。
其他存储和数据库选项
Firestore 的 Datastore 兼容 API 旨在支持旧版 App Engine 应用。如果您正在为新应用寻找面向文档的 NoSQL 数据库,建议您使用某个 Firestore API 而不是 Datastore API,以便利用更高级的功能。详细了解相关选项。
Firestore 是一种高度可伸缩的文档数据库,但可能并不适合所有使用场景。例如,它可能不是关系型数据库的最佳替代方案。在如下这些常见场景中,您可能应该考虑使用其他数据库:
- 如果您需要为联机事务处理 (OLTP) 系统提供完整支持 SQL 的关系型数据库,请考虑 Cloud SQL。
- 如果您不需要支持 ACID 事务,或者您的数据并非高度结构化的数据,请考虑 Bigtable。
- 如果您需要在联机分析处理 (OLAP) 系统中进行交互式查询,请考虑 BigQuery。
- 如果您需要存储大型不可变 blob 对象(例如大型图片或电影),请考虑 Cloud Storage。
如需详细了解其他数据库选项,请参阅数据库服务概览。