

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

# Amazon QLDB 中的核心概念和术语
<a name="ledger-structure"></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 中的核心概念和术语，包括分类账结构和分类账如何管理数据。作为分类账数据库，QLDB 与其他面向文档的数据库的不同之处在于以下关键概念。

**Topics**
+ [QLDB 数据对象模型](#ledger-structure.concepts)
+ [日记账账优先事务](#ledger-structure.transactions)
+ [查询数据](#ledger-structure.querying)
+ [数据存储](#ledger-structure.storage)
+ [QLDB API 模型](#ledger-structure.api)
+ [后续步骤](#ledger-structure.next-steps)

## QLDB 数据对象模型
<a name="ledger-structure.concepts"></a>

Amazon QLDB 中的基础数据对象模型说明如下：

1. **分类账**

   您的第一步是创建*账本*，这是 QLDB 中的主要 AWS 资源类型。要了解如何创建分类账，请参阅*控制台入门*中的[第 1 步：创建新分类账](getting-started-step-1.md)或[Amazon QLDB 分类账的基本操作](ledger-management.basics.md)。

   对于账本的`ALLOW_ALL`和`STANDARD`权限模式，您可以创建 AWS Identity and Access Management (IAM) 策略，以授予在此账本资源上运行 API 操作的权限。

   分类账 ARN 格式：

   ```
   arn:aws:qldb:${region}:${account-id}:ledger/${ledger-name}
   ```

1. **日记账账和表格**

   要开始在 QLDB 分类账中写入数据，首先要创建一个包含基本[CREATE TABLE](ql-reference.create-table.md)语句的*表格*。分类账数据由提交至分类账*日记账*文档的修订版组成。您可以在用户定义表格的上下文中将文档修订提交至分类账。在 QLDB 中，表格表示日记账中文档修订集合的实体化视图。

   在分类账的 `STANDARD` 权限模式下，您必须创建 IAM policy 来授予在此表资源上运行 PartiQL 语句的权限。凭借对表资源的权限，您可以运行访问表当前状态的语句。您也可以使用内置 `history()` 函数查询表的修订历史记录。

   表格 ARN 格式：

   ```
   arn:aws:qldb:${region}:${account-id}:ledger/${ledger-name}/table/${table-id}
   ```

   有关向分类账及其关联资源授予权限的更多信息，请参阅 [Amazon MQ 如何与 IAM 协同工作](security_iam_service-with-iam.md)。

1. **Documents**

   表由的修订版[QLDB 文档](ql-reference.docs.md)组成，这些版本是 [Amazon Ion](ion.md) `struct` 格式的数据集。*文档修订版*表示由唯一文档 ID 标识的一系列文档的单一版本。

   QLDB 存储您所提交文档的完整更改历史记录。表格允许您查询其文档的当前状态，而该 `history()` 函数允许您查询表格文档的整个修订历史记录。有关查询和编写修订版的详细信息，请参阅 [处理数据与历史记录](working-with-data.md)。

1. **系统目录**

   每个分类账还提供系统定义的*目录*资源，您可通过查询该资源列出分类账中的所有表和索引。在分类账的 `STANDARD` 权限模式下，您需要拥有该目录资源的 `qldb:PartiQLSelect` 权限才能执行以下操作：
   + 在系统目录表 [information\$1schema.user\$1tables](working.catalog.md)上运行`SELECT`语句。
   + 在 [QLDB 控制台](console_QLDB.md)的分类账详情页面上查看表格和索引信息。
   + 在 QLDB 控制台的 *PartiQL 编辑器*中查看表和索引列表。

   目录 ARN 格式：

   ```
   arn:aws:qldb:${region}:${account-id}:ledger/${ledger-name}/information_schema/user_tables
   ```

## 日记账账优先事务
<a name="ledger-structure.transactions"></a>

当应用程序在 QLDB 分类账中读取或写入数据时，它是在数据库事务中读取或写入数据的。所有事务均受[Amazon QLDB 资源中的限额和限制](limits.md#limits.fixed)中定义的限制。在事务中，QLDB 执行以下步骤：

1. 分类账读取数据的当前状态。

1. 执行事务中提供的语句，然后使用[乐观并发控制（OCC）](concurrency.md)检查其是否存在任何冲突，以确保完全可序列化的隔离。

1. 如果未发现 OCC 冲突，则按如下方式返回事务结果：
   + 对于读取，返回结果集并以仅附加 `SELECT` 的方式将语句提交至日记账中。
   + 对于写入，请以仅限追加的方式将任何更新、删除或新插入的数据提交到日记账中。

该*日记账*代表了关于所有日记账更改的、完整且不可变的历史记录。QLDB 在事务中向日记账中写入一个链式*数据块*。每个块都包含代表您插入、更新和删除的文档修订版本的*条目*对象，以及提交这些修订的 [PartiQL](ql-reference.md) 语句。

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

![\[Amazon QLDB 日记账结构图显示了一组构成一条链的数据块，以及每个数据块的序列号和数据块哈希。\]](http://docs.aws.amazon.com/zh_cn/qldb/latest/developerguide/images/verification/journal-structure.png)


该图显示事务作为包含文档修订条目的数据块提交到日记账账中。[每个数据块都经过哈希处理，并链接到后续数据块进行验证。](verification.md)每个数据块都有一个序列号，用于指定其在链中的地址。

**注意**  
在 Amazon QLDB 中，分支是分类账日记账账的分区。QLDB 目前仅支持单链日记账。

有关数据块的内容的更多信息，请参阅 [Amazon QLDB 中的日记账内容](journal-contents.md)。

## 查询数据
<a name="ledger-structure.querying"></a>

QLDB 旨在满足高性能联机事务处理（OLTP）的工作负载需求。分类账根据提交至日记账账的事务信息，提供数据的可查询表格视图。QLDB 中的表格*视图*是表中数据的子集。视图采用实时维护，因此它们始终可供应用程序查询。

您可以使用 PartiQL `SELECT` 语句查询以下系统定义的视图：
+ *用户* - 仅包含您在表中写入的数据的最新有效版本（即用户数据的当前状态）。这是 QLDB 中的默认视图。
+ *已提交* – T您的用户数据和系统生成的元数据的最新有效版本。这是与您用户表直接对应的完整系统定义表。

除了这些可查询视图外，您还可以使用内置[历史记录函数](working.history.md#working.history.function)查询数据的修订历史记录。历史函数在与已*提交视图*相同的架构中返回您的用户数据和关联的元数据。

## 数据存储
<a name="ledger-structure.storage"></a>

QLDB 包含两种类型的数据存储：
+ *日记账存储* - 分类账日记账账使用的磁盘空间。该日记账仅限附录，包含所有数据更改的完整、不可变且可验证历史记录。
+ *索引存储* - 分类账表、索引和索引历史记录使用的磁盘空间。索引存储包含的分类账数据针对高性能查询进行了优化。

将数据提交至日记账账后，它会具体化至您定义的表中。这些表经过优化，可实现更快、更高效查询。当应用程序使用事务数据 API 读取数据时，它会访问存储在索引存储中的表格和索引。

## QLDB API 模型
<a name="ledger-structure.api"></a>

QLDB 提供了两种类型的应用程序代码可以 APIs 与之交互：
+ *Amazon QLDB* — QLDB 资源管理 API（也称为*控制面板*）。此 API 仅用于管理分类账资源和非事务数据操作。您可以使用这些操作创建、删除、描述、列出和更新分类账。您还可以通过加密方式验证日记账数据，并导出或流式传输日记账块。
+ *Amazon QLDB 会话 *— QLDB 事务数据 API。您可以使用此 API 在带有[ PartiQL ](ql-reference.md)语句的分类账上运行数据事务。
**重要**  
我们建议使用 QLDB 驱动程序或 QLDB Shell 在分类账上运行数据交易，而不是直接与* QLDB 会话* API 交互。  
如果您使用的是 AWS 软件开发工具包，请使用 QLDB 驱动程序。该驱动程序在 *QLDB 会话*数据 API 之上提供了一个高级抽象层，并为您管理`SendCommand`操作。有关信息和支持的编程语言列表，请参阅 [驱动程序入门](getting-started-driver.md)。
如果您正在使用 AWS CLI，请使用 QLDB 外壳。Shell 是一个命令行接口，它使用 QLDB 驱动程序与分类账进行交互。有关信息，请参阅[使用 Amazon QLDB Shell（仅限数据 API）](data-shell.md)。

有关这些 API 操作的更多信息，请参阅 [Amazon QLDB API 参考](api-reference.md)。

## 后续步骤
<a name="ledger-structure.next-steps"></a>

要了解如何使用分类账处理数据，请参阅 [在 Amazon QLDB 中处理数据与历史记录](working-with-data.md) 并遵循描述创建表、插入数据和运行基本查询过程的示例。本指南使用示例数据和查询示例作为上下文，详细说明这些概念的运行方式。

要使用 QLDB 控制台快速开始使用示例应用程序教程，请参阅[Amazon QLDB 控制台入门](getting-started.md)。

有关本节中描述的关键术语和定义的列表，请参阅 [Amazon QLDB 词汇表](qldb-glossary.md)。