

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon QLDB 概览
<a name="what-is.overview"></a>

**重要**  
终止支持通知：现有客户将能够使用 Amazon QLDB，直到 2025 年 7 月 31 日终止支持。有关更多详细信息，请参阅[将亚马逊 QLDB 账本迁移到亚马逊 Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)。

以下章节高度概述了 Amazon QLDB 服务组件及其交互方式。

**Topics**
+ [日记账优先](#what-is.overview.journal)
+ [不可变的](#what-is.overview.immutable)
+ [可通过密码验证](#what-is.overview.verifiable)
+ [类似 SQL、且文档灵活](#what-is.overview.sql-like)
+ [开源开发人员工具](#what-is.overview.open-source)
+ [无服务器且高度可用](#what-is.overview.scalable)
+ [企业级](#what-is.overview.enterprise)

## 日记账优先
<a name="what-is.overview.journal"></a>

在传统的数据库架构中，通常将数据写入表中作为事务的一部分。事务日志 —（通常是内部实现）记录了所有事务及其对数据库所做的修改。事务日志是数据库的重要组成部分。在发生系统故障、灾难恢复或者数据复制时，您需要使用日志来重播事务。但是，数据库事务日志并非一成不变，也不是为用户提供直接、便捷的访问而设计的。

在 Amazon QLDB 中，日记账是数据库的核心。此日记账在结构上与事务日志类似，是一种不可变的、仅限附加的数据结构，用于存储您的应用程序数据以及相关的元数据。所有写入事务（包含更新和删除）都将首先提交到日记账中。

QLDB 使用日记账确定分类账数据的当前状态，方法是将其具体化为可查询的、用户定义的表格。这些表格还提供了所有事务数据（包含文档修订版和元数据）的可访问历史记录。此外，该日记账还处理分类账数据的并发性、排序、加密验证和可用性。

下图所示为 QLDB 日记账体系结构。

![\[标题为 QLDB 的示意图：日记账是数据库，显示了日记账架构，其应用程序连接到分类账并将事务提交到日记账，这些事务被具体化为表格。\]](http://docs.aws.amazon.com/zh_cn/qldb/latest/developerguide/images/journal-first.png)

+ 在此示例中，应用程序连接到分类账并运行在名为`cars`的表中插入、更新和删除文档的事务。
+ 数据首先按顺序写入日记账。
+ 然后，使用内置视图将数据具体化至表中。您可通过这些视图查询汽车的当前状态和完整历史记录，并为每个版本分配一个版本号。
+ 您也可直接从日记中导出或流式传输数据。

## 不可变的
<a name="what-is.overview.immutable"></a>

由于 QLDB 日记账仅限追加，因此它会完整记录所有无法修改或者覆盖的数据更改。没有 APIs 其他方法可以更改任何已提交的数据。这种日记账结构允许您访问和查询分类账完整历史记录。

**注意**  
*QLDB 支持不可变性的唯一例外是数据编修。*使用此功能，您可以遵守监管法规，例如欧盟的《通用数据保护条例》（GDPR）与《加州消费者隐私法》（CCPA）。  
QLDB 还支持数据编修操作，允许您永久删除表历史记录中的非活动文档的修订内容。密文操作仅删除指定修订版中的用户数据，而日记账序列和文档元数据则保持不变。这样可保持分类账的整体数据完整性。有关更多信息，请参阅 [对文档修订版执行编校](working.redaction.md)。

QLDB 在事务中向日记账中写入一个数据块。每个块都包含代表您插入、更新和删除的文档修订版本的条目对象，以及提交这些修订的语句。这些数据块是按顺序排列以及哈希链的，以保证数据的完整性。

下面的示意图阐明了此日记账结构。

![\[标题为记录的图表无法更改，它显示了 QLDB 中不可变的、仅限附加的日记结构，以及每个哈希链式日记账数据块的序号。\]](http://docs.aws.amazon.com/zh_cn/qldb/latest/developerguide/images/immutable.png)


该图显示，事务以数据块的形式提交到日记账中，这些数据块被哈希链连接以供验证。每个数据块都有一个序列号来指定其地址。

## 可通过密码验证
<a name="what-is.overview.verifiable"></a>

日记账数据块通过加密哈希技术进行排序并链接在一起，类似于数据块链。QLDB 使用日记账哈希链，通过加密验证方法提供事务数据的完整性。使用*摘要*（代表日记账截至某个时间点的完整哈希链的哈希值）和*默克尔审计证明*（一种证明二叉哈希树中任何节点有效性的机制），您可以验证您的数据在任何时候都没有发生意想不到的变化。

下图显示了涵盖日记账在某个时间点的完整哈希链的摘要。

![\[标题为使用 SHA-256 进行哈希链的示意图，显示了涵盖日记账完整哈希链的摘要，其日记账数据块结构包含表示 Ion 文档、PartiQL 语句和元数据的条目。\]](http://docs.aws.amazon.com/zh_cn/qldb/latest/developerguide/images/verifiable.png)


在此图中，使用 SHA-256 加密哈希函数对日记账数据块进行哈希处理，并按顺序链接到后续块。每个数据块都包含包含您的数据文档、元数据和事务中运行的 PartiQL 语句的条目。

有关更多信息，请参阅 [Amazon QLDB 中的数据验证](verification.md)。

## 类似 SQL、且文档灵活
<a name="what-is.overview.sql-like"></a>

QLDB 使用 PartiQL 作为其查询语言，使用 Amazon Ion 作为其面向文档的数据模型。PartiQL 是开源、与 SQL 兼容的查询语言，现已扩展为可与 Ion 配合使用。使用 PartiQL，您可使用熟悉的 SQL 运算符插入、查询和管理数据。查询平面文档时，语法与使用 SQL 查询的关系表相同。要了解有关 PartiQL 的 QLDB 实现的更多信息，请参阅[Amazon QLDB PartiQL 参考](ql-reference.md)。

Amazon Ion 是 JSON 的超集。Ion 是基于文档的开源数据格式，可让您灵活地存储和处理结构化、半结构化和嵌套数据。要了解有关 QLDB 中 Ion 的更多信息，请参阅 [Amazon QLDB 中的 Amazon Ion 数据格式参考](ion.md)。

有关传统关系数据库与 QLDB 中核心组件和功能的高级比较，请参阅[从关系至分类账](what-is.relational-ledger.md)。

## 开源开发人员工具
<a name="what-is.overview.open-source"></a>

为了简化应用程序开发，QLDB 提供了各类编程语言的开源驱动程序。您可使用这些驱动程序通过在分类账上运行 PartiQL 语句，并处理这些语句的结果来与事务数据 API 进行交互。有关当前支持的驱动程序语言的信息和教程，请参阅 [Amazon QLDB 驱动程序入门](getting-started-driver.md)。

Amazon Ion 还提供可为您处理 Ion 数据客户端库。有关处理 Ion 数据的开发者指南和代码示例，请参阅上的 [Amazon Ion 文档](http://amzn.github.io/ion-docs/) GitHub。

## 无服务器且高度可用
<a name="what-is.overview.scalable"></a>

QLDB 完全托管、无服务器、且高度可用。该服务会自动扩展，以支持您的应用程序需求，您无需预配置实例或容量。您的数据的多个副本将在 AWS 区域中的可用区内复制，并在中的可用区之间复制。

## 企业级
<a name="what-is.overview.enterprise"></a>

QLDB 事务完全符合原子性、一致性、隔离性与持久性（ACID）属性。QLDB 使用乐观并发控制（OCC），事务以完全序列化性运行，即最高级别的隔离。这意味着不存在出现幻像读取、脏读、写入偏差或者其他类似并发问题的风险。有关更多信息，请参阅 [Amazon QLDB 并发模型](concurrency.md)。