Datastore 概览

Datastore 是一个 NoSQL 文档数据库,能够自动扩缩、具备出色的性能,并且易于进行应用开发。Datastore 特性包括:

  • 原子化事务。Datastore 在执行一组操作时,可以确保这些操作要么全部成功、要么全部不发生。
  • 读取和写入的高可用性。Datastore 在 Google 数据中心中运行,这些数据中心使用冗余来最大限度地降低故障点产生的影响。
  • 高性能的大规模可扩缩性。Datastore 使用分布式架构来自动管理扩缩。Datastore 混合使用多种索引和查询约束机制,因此可让查询性能随着结果集而非数据集的大小而扩缩。
  • 灵活的数据存储和查询。Datastore 可自然地映射到面向对象的语言和脚本语言,并可通过多个客户端向应用提供服务。它还提供了一种类似于 SQL 的查询语言
  • 在高度一致性与最终一致性之间取得平衡。Datastore 会确保祖先查询和以键为依据的实体查找始终能够获得高度一致的数据。所有其他查询则保证最终一致性。这样的一致性模型让您的应用可以在自如处理大量数据和用户的同时,提供出色的用户体验。

  • 静态加密。Datastore 会在所有数据写入磁盘之前自动对其加密,并在已获授权的用户读取数据时自动将其解密。如需了解详情,请参阅服务器端加密

  • 完全托管,无计划内停机时间。Google 负责管理 Datastore 服务,以便您可以专注于自己的应用。在服务进行计划内升级时,您的应用仍然可以使用 Datastore。

Datastore 模式 Firestore

Firestore 是 Datastore 的最新版本;与 Datastore 相比,这个新版本引入了多项改进。现有的 Datastore 用户可以通过创建新的 Datastore 模式 Firestore 数据库实例来使用这些改进功能。未来,所有现有的 Datastore 数据库都将自动升级为 Datastore 模式 Firestore

与传统数据库的对比

Datastore 接口的许多特点与传统数据库相同,但作为 NoSQL 数据库,它在描述数据对象之间的关系方面采用了不同的方式。以下是 Datastore 与关系型数据库的简要对比:

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

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

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

适合的场景

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

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

其他存储和数据库选项

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

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

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

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