Datastore 概览

Datastore 模式 Firestore (Datastore) 是一个 NoSQL 文档数据库,以可自动扩缩、性能出色和易于进行应用开发为设计目标。Datastore 特性包括:

  • 原子化事务。Datastore 在执行一组操作时,可以确保这些操作要么全部成功、要么全部不发生。
  • 读取和写入的高可用性。Datastore 在 Google 数据中心中运行,这些数据中心使用冗余来最大限度地降低故障点产生的影响。
  • 高性能的大规模可扩缩性。Datastore 使用分布式架构来自动管理扩缩。Datastore 混合使用多种索引和查询约束机制,因此可让查询性能随着结果集而非数据集的大小而扩缩。
  • 灵活的数据存储和查询。Datastore 可自然地映射到面向对象的语言和脚本语言,并可通过多个客户端向应用提供服务。它还提供了一种类似于 SQL 的查询语言
  • 强一致性。Datastore 可确保所有查询都保持高度一致。
  • 静态加密。Datastore 会在所有数据写入磁盘之前自动对其加密,并在已获授权的用户读取数据时自动将其解密。如需了解详情,请参阅服务器端加密
  • 完全托管,无计划内停机时间。Google 负责管理服务,以便您可以专注于自己的应用。在服务进行计划内升级时,您的应用仍然可以使用 Datastore。

与关系型数据库的比较

虽然 Datastore 界面具有许多与关系型数据库类似的功能,但作为 NoSQL 数据库,它在描述数据对象间关系的方式方面有所不同。以下是 Datastore 与关系型数据库在概念方面的简要对比:

概念 Datastore Firestore 关系型数据库
对象类别 种类 集合组 表格
一个对象 实体 文档
一个对象的单个数据 属性 字段
对象的唯一 ID 文档 ID 主键

与关系型数据库表中的行不同,相同种类的 Datastore 实体可以具有不同的属性,并且不同的实体可以具有名称相同但值类型不同的属性。由于这些独有的特点,为了充分利用 Cloud Datastore 的自动扩缩能力,您需要以不同的方式来设计和管理数据。具体来说,Datastore 在以下几个重要方面与传统关系型数据库不同:

  • Datastore 的设计能够自动扩容来承载超大数据集,因而应用在收到更多流量时也能保持高性能:
    • Datastore 会根据需要自动进行数据分布,实现写入规模的扩缩。
    • Datastore 只支持性能随结果集而非数据集的大小而扩缩的查询,因此也能实现读取能力的扩缩。这意味着,如果一个查询的结果集包含 100 个实体,无论它搜索的是一百个实体还是一百万个实体,其性能始终相同。这一属性是某些类型的查询不受支持的关键原因。
  • 由于所有查询都由预先构建的索引提供结果,因此可以执行的查询种类比支持 SQL 的关系型数据库所允许的查询种类更有限。具体来说,Datastore 不支持联接操作、对多个属性的不等性过滤,也不支持基于子查询的结果对数据进行过滤。
  • 与强制执行某种架构的关系型数据库不同,Datastore 是无架构的。它不要求相同种类的实体拥有一致的属性集(但您可以选择在自己的应用代码中强制执行这样的要求)。

适合的场景

Datastore 极为适合那些依赖大规模高可用性结构化数据的应用。您可以使用 Datastore 来存储和查询以下所有类型的数据:

  • 供零售商了解实时库存和商品详情的商品目录。
  • 根据用户既往活动和偏好提供定制化体验的用户个人资料。
  • 基于 ACID 属性的事务。例如,将资金从一个银行账户转移到另一个银行账户。

其他存储和数据库选项

Datastore 并不适合所有使用场景。例如,Datastore 不是关系型数据库,也不是分析数据的有效解决方案。

在如下这些常见场景中,您可能应该考虑使用其他产品,而不是 Datastore:

  • 如果您需要为联机事务处理 (OLTP) 系统提供完整支持 SQL 的关系型数据库,请考虑 Cloud SQL
  • 如果您不需要支持 ACID 事务,或者您的数据并非高度结构化的数据,请考虑 Bigtable
  • 如果您需要在联机分析处理 (OLAP) 系统中进行交互式查询,请考虑 BigQuery
  • 如果您需要存储大型不可变 blob 对象(例如大型图片或电影),请考虑 Cloud Storage

如需详细了解其他数据库选项,请参阅数据库服务概览

后续步骤