亚马逊AWS官方博客

现已推出 – Amazon Quantum Ledger Database (QLDB)

由于数据类型、查询模型、索引选项、扩展期望和性能要求五花八门,因此数据库肯定不是一体适用型产品。正因如此,我们推出了许多不同的 AWS 数据库产品,且每种数据库产品都专门为满足不同应用程序类型的需求而构建。

QLDB 简介
今天,我想向大家介绍一下 AWS 数据库系列的最新成员 Amazon QLDB。该产品在 AWS re:Invent 2018 大会上首次发布,当时以预览版形式推出,现今在五个 AWS 区域中以生产形式推出。

作为分类账数据库,QLDB 旨在为存储的数据提供一个权威数据源(通常称为记录系统)。它可对无法更新、更改或删除的所有已提交数据更改维护完整的、不可变的历史记录。QLDB 支持对历史数据执行 PartiQL SQL 查询,还提供了一个 API,可让您通过密码验证历史记录的准确性和合法性。这些功能使 QLDB 非常适合用于银行和金融、电子商务、运输和物流、人力资源和薪酬、制造、政府应用以及许多其他需要维护存储数据完整性和历史记录的使用案例。

QLDB 重要概念
在深入研究之前,我们先看几个最重要的 QLDB 概念:

分类账 – QLDB 分类账由一组 QLDB 表和一个日记账组成,该日记账用于对这些表的更改维护完整、不可变的历史记录。分类账可以命名,也可以添加标记。

日记账 – 日记账由一系列数据块组成,每个数据块都通过密码链接到前面的数据块,以便可以验证更改。数据块又包含对表所做的实际更改,并编入索引,以便有效检索。这种只追加型模型可确保无法编辑或删除以前的数据,从而使分类账不可变。QLDB 支持将日记账的全部或部分导出到 S3。

– 表存在于分类账中,包含文档修订集合。表支持文档字段上的可选索引;索引可以提高使用等式 (=) 谓词的查询性能。

文档 – 文档存在于表中,并且必须采用 Amazon Ion 格式。Ion 是一个 JSON 超集,增加了数据类型、类型批注和注释。QLDB 支持包含嵌套 JSON 元素的文档,并允许编写引用和包含这些元素的查询。文档不需要遵循任何特定架构,因此您能够灵活地构建轻松适应各种变化的应用程序。

PartiQLPartiQL 是一种新的开放标准查询语言,支持对关系数据、半结构化数据和嵌套数据执行 SQL 兼容的访问,同时又独立于任何特定数据源。如需了解更多信息,请阅读推出 PartiQL:适合所有数据的一种查询语言

无服务器 – 您不必担心预置容量或配置读写吞吐量问题。只需创建分类账,定义表,然后 QLDB 将自动扩展以满足您的应用需求。

使用 QLDB
您可以从 AWS 管理控制台AWS 命令行界面 (CLI)、CloudFormation 模板或通过调用 QLDB API 创建 QLDB 分类账和表。我将使用 QLDB 控制台,并按照 Amazon QLDB 入门中的步骤执行操作。我打开控制台,然后单击开始教程以开始使用:

“入门”页面简要列出了前三个步骤;我单击创建分类账继续(这将在一个新浏览器选项卡中打开):

我为分类账输入一个名称 (vehicle-registration),添加标记,然后再次单击创建分类账继续:

该分类账的初始状态为正在创建,然后在一两分钟内转换为活动状态:

我返回“入门”页面,刷新分类账列表,选择这个新的分类账,然后单击加载示例数据

此过程大约需要一秒钟,并会创建四个表和六个索引:

我还可以使用诸如 CREATE TABLECREATE INDEXINSERT INTO 等 PartiQL 语句来完成同样的任务。

加载表、索引和示例数据后,我单击编辑器,然后运行第一个查询(单表 SELECT):

这将返回一行,同时受益于 VIN 字段上的索引。我还可以运行一个联接两个表的更复杂查询:

我可以获取文档 ID(使用此处的查询),然后更新文档:

我可以查询表或表中特定文档的修改历史记录,并能够找到一定范围内和特定文档上的修改(请阅读查询修订历史记录以了解更多信息)。以下是一个简单查询,可返回在我撰写本文当天对 VehicleRegistration 表中所有文档的修改历史记录:

如您所见,每一行都是一个结构化 JSON 对象。我可以选择所需的任何行,然后单击查看 JSON 进行进一步检查:

我在上文提到 PartiQL 可以处理嵌套数据。VehicleRegistration 表包含所有权信息,如下所示:

{
   "Owners":{
      "PrimaryOwner":{
         "PersonId":"6bs0SQs1QFx7qN1gL2SE5G"
      },
      "SecondaryOwners":[

      ]
  }

通过 PartiQL,我可以使用“.”符号引用嵌套数据:

我还可以验证存储在分类账日记账中的文档的完整性。如需了解完整描述,请参阅验证分类账中的文档,此示例充分例证了通过密码验证的强大功能(和价值)。每个 QLDB 分类账都有一个关联的摘要。摘要是一个 256 位哈希值,唯一地表示分类账截至某时间点的整个文档修订历史记录。要访问摘要,我选择一个分类账并单击获取摘要

单击保存时,控制台将提供一个简短文件,其中包含验证分类账所需的所有信息。我将此文件保存在一个安全位置,以便在需要验证分类账中的文档时使用。需要验证时,访问该文件,单击左侧导航栏中的验证,并输入执行验证所需的值。这包括文档修订的数据块地址和文档 ID。我还会选择之前保存的摘要,然后单击验证

QLDB 重新计算哈希以确保文档未偷偷更改,并显示验证结果:

在生产环境中,您可使用 QLDB API 定期下载摘要并验证文档的完整性。

使用 QLDB 构建应用程序
您可以使用适用于 Java 的 Amazon QLDB 驱动程序编写用于访问和操作分类账数据库的代码。这是一个 Java 驱动程序,可用于创建会话、在事务范围内执行 PartiQL 命令,并检索结果。适用于其他语言的驱动程序正在开发中;敬请关注更多信息。

现已推出
Amazon QLDB 现已在美国东部(弗吉尼亚北部)美国东部(俄亥俄)美国西部(俄勒冈)欧洲(爱尔兰)亚太地区(东京)区域推出。定价基于以下因素,在 Amazon QLDB 定价页面中有详细介绍,其中包括一些实际示例:

  • 写入操作
  • 读取操作
  • 日记账存储
  • 为存储编制索引
  • 数据传输

Jeff