DynamoDB 核心组件

表、项目和属性

以下是基本的 DynamoDB 组件:

  •  – 类似于其他数据库系统,DynamoDB 将数据存储在表中。 是数据的集合。例如,请参阅名为 People 的示例表,该表可用于存储有关好友、家人或关注的任何其他人的个人联系信息。您也可以建立一个 Cars 表,存储有关人们所驾驶的车辆的信息。

  • 项目 – 每个表包含零个或更多个项目。项目 是一组属性,具有不同于所有其他项目的唯一标识。在 People 表中,每个项目表示一位人员。在 Cars 表中,每个项目代表一种车。DynamoDB 中的项目在很多方面都类似于其他数据库系统中的行、记录或元组。在 DynamoDB 中,对表中可存储的项目数没有限制。

  • 属性 – 每个项目包含一个或多个属性。属性 是基础的数据元素,无需进一步分解。例如,People 表中的一个项目包含名为 PersonIDLastNameFirstName 等的属性。对于 Department 表,项目可能包含 DepartmentIDNameManager等属性。DynamoDB 中的属性在很多方面都类似于其他数据库系统中的字段或列。

  • 主键

    创建表时,除表名称外,您还必须指定表的主键。主键唯一标识表中的每个项目,因此,任意两个项目的主键都不相同。

    DynamoDB 支持两种不同类型的主键:

    • 分区键 – 由一个名为 partition key 的属性构成的简单主键。

      DynamoDB 使用分区键的值作为内部散列函数的输入。来自散列函数的输出决定了项目将存储到的分区 (DynamoDB 内部的物理存储)。

      在只有分区键的表中,任何两个项目都不能有相同的分区键值。

      表、项目和属性 中所述的 People 表是带简单主键 (PersonID) 的示例表。您可以直接访问 People 表中的任何项目,方法是提供该项目的 PersonId 值。

    • 分区键和排序键 – 称为复合主键,此类型的键由两个属性组成。第一个属性是分区键,第二个属性是排序键

      DynamoDB 使用分区键值作为对内部散列函数的输入。来自散列函数的输出决定了项目将存储到的分区 (DynamoDB 内部的物理存储)。具有相同分区键值的所有项目按排序键值的排序顺序存储在一起。

      在具有分区键和排序键的表中,两个项目可能具有相同的分区键值。但是,这两个项目必须具有不同的排序键值。

      表、项目和属性中所述的 Music 表是包含一个复合主键(Artist 和 SongTitle)的表的示例。您可以直接访问 Music 表中的任何项目,方法是提供该项目的 Artist 和 SongTitle 值。

      在查询数据时,复合主键可让您获得额外的灵活性。例如,如果您仅提供了 Artist 的值,则 DynamoDB 将检索该艺术家的所有歌曲。要仅检索特定艺术家的一部分歌曲,您可以提供一个 Artist 值和一系列 SongTitle 值。

    二级索引

    您可以在一个表上创建一个或多个二级索引。利用二级索引,除了可对主键进行查询外,还可使用替代键查询表中的数据。DynamoDB 不需要您使用索引,但它们将为您的应用程序提供数据查询方面的更大的灵活性。在表中创建二级索引后,您可以从索引中读取数据,方法与从表中读取数据大体相同。

    DynamoDB 支持两种索引:

    • Global secondary index – 一种带有可能与表中不同的分区键和排序键的索引。

    • 本地二级索引 – 分区键与表中的相同但排序键与表中的不同的索引。

    DynamoDB 中的每个表具有 20 个全局二级索引(默认限制)和 5 个本地二级索引的限制。

    DynamoDB 流

    DynamoDB 流 是一项可选功能,用于捕获 DynamoDB 表中的数据修改事件。有关这些事件的数据将以事件发生的顺序近乎实时地出现在流中。

    每个事件由一条流记录 表示。如果您对表启用流,则每当以下事件之一发生时,DynamoDB 流 都会写入一条流记录:

    • 向表中添加了新项目:流将捕获整个项目的映像,包括其所有属性。

    • 更新了项目:流将捕获项目中已修改的任何属性的“之前”和“之后”映像。

    • 从表中删除了项目:流将在整个项目被删除前捕获其映像。

    每条流记录还包含表的名称、事件时间戳和其他元数据。流记录具有 24 个小时的生命周期;在此时间过后,它们将从流中自动删除。

    您可以将 DynamoDB 流 与 AWS Lambda 结合使用以创建触发器 — 在流中有您感兴趣的事件出现时自动执行的代码。例如,假设有一个包含某公司客户信息的 Customers 表。假设您希望向每位新客户发送一封“欢迎”电子邮件。您可对该表启用一个流,然后将该流与 Lambda 函数关联。Lambda 函数将在新的流记录出现时执行,但只会处理添加到 Customers 表的新项目。对于具有 EmailAddress 属性的任何项目,Lambda 函数将调用 Amazon Simple Email Service (Amazon SES) 以向该地址发送电子邮件。

    注意

    在此示例中,最后一位客户 Craig Roe 将不会收到电子邮件,因为他没有 EmailAddress

    除了触发器之外,DynamoDB 流 还提供了强大的解决方案,例如,AWS 区域内和跨 AWS 区域的数据复制、DynamoDB 表中的数据具体化视图、使用 Kinesis 具体化视图的数据分析等。

    读/写容量模式和吞吐量

    您可以每 24 小时在读/写容量模式之间切换一次。

    容量单位大小(对于预置表)

    一个读取容量单位 = 对大小为 4 KB 的项目每秒执行一次强一致性读取,或每秒执行两次最终一致性读取。

    一个写入容量单位 = 对大小为 1 KB 的项目每秒执行一次写入。

    事务读取请求需要 2 个读取容量单位才能对大小最多为 4 KB 的项目每秒执行一次读取。

    事务写入请求需要 2 个写入容量单位才能对大小最多为 1 KB 的项目每秒执行一次写入。

    请求单位大小(对于按需表)

    一个读取请求单位 = 对大小最多为 4 KB 的项目执行一次强一致性读取,或执行两次最终一致性读取。

    一个写入请求单位 = 对大小最多为 1 KB 的项目执行一次写入。

    事务读取请求需要 2 个读取请求单位才能对大小最多为 4 KB 的项目执行一次读取。

    事务写入请求需要 2 个写入请求单位才能对大小最多为 1 KB 的项目执行一次写入。

    表大小

    表的大小没有实际限制。表的项目数和字节数是无限制的。

    每个账户中表的数量

    对于任何 AWS 账户,每个 AWS 区域的初始限制为 256 个表。

    数据类型

    字符串

    字符串的长度会受到 400 KB 这一项目大小上限的限制。

    字符串是使用 UTF-8 二进制编码的 Unicode。由于 UTF-8 是宽度可变的编码,因此 DynamoDB 使用其 UTF-8 字节确定字符串的长度。

    数字

    数字最多可精确到 38 位,并且可以为正数、负数或零。

    • 正数范围:1E-130 到 9.9999999999999999999999999999999999999E+125

    • 负数范围:-9.9999999999999999999999999999999999999E+125 到 -1E-130

    DynamoDB 使用 JSON 字符串代表请求和回复中的数字数据。有关更多信息,请参阅DynamoDB 低级 API

    如果数字精度十分重要,则应使用从数字类型转换的字符串将数字传递给 DynamoDB。

    二进制

    二进制的长度会受到项目大小上限 (400 KB) 的限制。

    使用二进制属性的应用程序必须先用 Base64 格式对数据进行编码,然后将其发送至 DynamoDB。接收到数据后,DynamoDB 将数据解码为无符号字节数组,将其用作属性的长度。

    项目

    项目大小

    DynamoDB 中的项目大小上限为 400 KB,包括属性名称二进制长度(UTF-8 长度)和属性值长度(同为二进制长度)。属性名称也包含在此大小限制之内。

    例如,比如一个项目有两个属性:一个属性名为“shirt-color”,值为“R”,另一个属性名为“shirt-size”,值为“M”。该项目的总大小为 23 字节。

    具有本地二级索引的表的项目大小

    对于表上的每个local secondary index,以下对象的总大小有 400 KB 的限制:

    • 表中项目数据的大小。

    • 与该项目对应的local secondary index条目的大小,包括其键值和投影属性。

    属性

    每个项目的属性“名称/值”对

    每个项目的属性的累计大小必须在 DynamoDB 项目大小上限 (400 KB) 以内。

    列表、映射或集中值的数量

    只要包含值的项目大小在 400 KB 这一大小限制以内,列表、映射或集中值的数量就没有限制。

    属性值

    属性值不能是空字符串或空集(字符串集、数字集或二进制集),但可以是空列表和映射。

    嵌套属性深度

    DynamoDB 支持高达 32 级深度的嵌套属性。

猜你喜欢

转载自www.cnblogs.com/cloudrivers/p/11626992.html
今日推荐