问:什么是 Amazon DynamoDB?

Amazon DynamoDB 是一项完全托管的 NoSQL 数据库服务,提供快速而可预测的性能,能够实现无缝扩展。使用 DynamoDB,客户可以将运行和扩展分布式数据库的管理工作负担交给 AWS,因而无需担心硬件预置、设置和配置、吞吐容量规划、复制、软件修补或集群扩展等问题。

问:Amazon DynamoDB 可以代我进行哪些管理?

Amazon DynamoDB 消除了影响数据库扩展的主要绊脚石之一:数据库软件的管理,以及运行数据库所需的硬件配置。您可在短短几分钟之内部署非关系数据库。DynamoDB 可自动扩展吞吐容量以满足工作负载需求,并随着您的表大小的增长对数据进行分区和再分区。此外,DynamoDB 还可在一个 AWS 地区的三个数据中心之间同步复制数据,为您提供高可用性和数据持久性。

问:读取一致性是什么意思?我为什么应该予以关注?

Amazon DynamoDB 可存储每个表分散在各地的三个副本,以实现高可用性和数据持久性。读取一致性表示的是某个数据项的成功写入或更新会在何时、以何种方式反映在该数据项的后续读取操作中。DynamoDB 公布的逻辑使您能够针对应用程序中的每次读取请求,指定您需要的一致性特征。

问:Amazon DynamoDB 的一致性模型是什么样的?

从 Amazon DynamoDB 读取数据时,用户可以指定希望读取是最终一致性读取还是强一致性读取:

  • 最终一致性读取 (默认) – 最终一致性选项可以最大程度地提高读取吞吐量。但是,最终一致性读取可能不会反映最近完成的一次写入操作的结果。所有数据副本的一致性通常可在一秒钟之内实现。在短时间之后重复读取,应会返回更新的数据。
  • 强一致性读取 – 除了提供最终一致性读取外,Amazon DynamoDB 还使您可以根据应用程序或应用程序某元素的要求,以灵活而有控制力的方式请求强一致性读取。强一致性读取返回的结果可反映在读取前收到成功响应的所有写入。

问:DynamoDB 是否支持就地原子更新?

Amazon DynamoDB 支持快速就地更新。您可以使用单个 API 调用,递增或递减行中的某个数字属性。同样地,您能够以原子方式添加或删除集、列表或映射。有关原子更新的更多信息,请参阅原子计数器

问:为什么 Amazon DynamoDB 是基于固态硬盘构建的?

Amazon DynamoDB 完全运行在固态硬盘 (SSD) 上。SSD 有助于 AWS 实现设计目标,即在可预测的低延迟响应时间之内,存储和访问任何规模的数据。SSD 还具有很高的 I/O (每秒读取次数和每秒写入次数很高) 性能,使我们能够经济高效地处理大规模请求工作负载,并能将这种成本效益以较低的请求价格让渡给客户。

问:DynamoDB 的存储成本似乎很高。这是一种经济高效的服务吗?

和任何其他产品一样,我们建议 Amazon DynamoDB 的潜在客户考虑解决方案的整体成本,而不要只局限于单个价格指标。处理数据库工作负载的总成本受到两个因素的影响:请求流量要求、存储的数据量。大部分数据库工作负载的特点是,每存储 1GB 数据都需要很高的 I/O (每秒读取次数和每秒写入次数很高)。DynamoDB 是基于 SSD 驱动器构建的,相对于旋转介质而言,它每存储 1GB 数据的成本有所提高,但让我们能够提供非常低的请求成本。根据我们在典型数据库工作负载方面的经验,我们认为,相较于使用典型的基于旋转介质的关系数据库或非关系数据库,使用基于 SSD 的 DynamoDB 的总费用通常更低。如果您需要存储大量访问频率很低的数据,DynamoDB 可能不太适合您。对于此类使用案例,我们建议您使用 Amazon S3

您还应注意,存储成本反映了将每个数据项的多个副本存储于同一 AWS 区域内多个设施的成本。

问:DynamoDB 仅适用于大型应用程序吗?

不是。Amazon DynamoDB 提供无缝扩展,以便您可以随着应用程序需求的增加自动进行扩展。如果您需要在任何规模上都能实现快速而可预测的性能,那么 DynamoDB 就是您的理想之选。

问:如何开始使用 Amazon DynamoDB?

单击“Sign Up”立即开始使用 Amazon DynamoDB。然后,您可以使用 AWS 管理控制台或 Amazon DynamoDB API,开始与 Amazon DynamoDB 进行交互。如果您使用 AWS 管理控制台,您可以使用 Amazon DynamoDB 创建一个表,只需进行几次点击即可开始体验。

问:DynamoDB 支持哪种类型的查询功能?

Amazon DynamoDB 支持使用用户定义的主键来执行 GET/PUT 操作。主键是表中项目仅有的一个必需属性,并且唯一地标识每个项目。您在创建表时指定主键。除此之外,DynamoDB 还支持您使用全局二级索引和本地二级索引对非主键属性进行查询,从而提供灵活的查询服务。

主键可以是单属性的分区键或复合的分区-排序键。例如,单属性的分区主键可以是“UserID”。这使您能够快速读取和写入与特定用户 ID 相关联的项目的数据。

复合的分区-排序键可作为一个分区键元素和一个排序键元素进行索引。这个多部分键可保持第一个元素值和第二个元素值之间的层次结构。例如,复合的分区-排序键可以由“UserID”(分区)和“Timestamp”(排序)组成。通过保持分区键元素的恒定,您可以在排序键元素中进行搜索以检索项目。这样您就可以使用 Query API 进行检索,例如在一系列时间戳中检索带有单个 UserID 的所有项目。

想要了解更多有关全局二级索引及其查询功能的信息,请参阅常见问题中的“二级索引”部分。

 

问:如何在 Amazon DynamoDB 中更新和查询数据项?

使用 AWS 管理控制台或 CreateTable API 创建表之后,您可以使用 PutItem 或 BatchWriteItem API 来插入项目。然后,您可以使用 GetItem、BatchGetItem 或 Query API(如果复合主键已启用且正在表中使用)来检索您添加到表中的项目。

问:Amazon DynamoDB 是否支持条件运算?

支持。您可以指定一个条件,必须达到该条件才能对项目执行放置、更新或删除操作。如需执行条件运算,您可以定义一个 ConditionExpression,该表达式通过以下内容构建:

  • 布尔函数:ATTRIBUTE_EXIST、CONTAINS 和 BEGINS_WITH
  • 比较运算符:=、<>、<、>、<=、>=、BETWEEN 和 IN
  • 逻辑运算符:NOT、AND 和 OR。 

您可以构建一个由多个条件子句组合而成的自由形式条件表达式,包括嵌套子句。通过条件运算,用户可以在 DynamoDB 上实现开放式并发控制系统。想要了解更多有关条件运算的详细信息,请参阅我们的文档

问:键条件是否支持表达式?

是的,您可将表达式指定为 Query 查询 API 调用的一部分,从而使用 KeyConditionExpression 参数,基于表格上的主键筛选结果。

问:分区和分区-排序键是否支持表达式?

是的,您可以对分区和分区-排序键使用表达式。有关适用于分区和分区-排序键的表达式的更多信息,请参阅文档页面

问:Amazon DynamoDB 是否支持递增运算或递减运算?

是,Amazon DynamoDB 允许对标量值执行原子递增和递减运算。

问:什么时候应该使用 Amazon DynamoDB,而不是使用 Amazon RDS 或 Amazon EC2 上的关系数据库引擎?

当今基于 Web 的应用会生成和消耗大量数据。例如,某个在线游戏刚推出时可能只有几千个用户,数据库工作负载很小,每秒进行 10 次写入和 50 次读取操作。但是,如果游戏取得成功,则可能很快会发展到拥有数百万个用户,读写操作次数达到每秒数万次甚至每秒数十万次。每天可能生成数 TB 甚至更多数据。利用 Amazon DynamoDB 开发应用程序,您能够从较小规模起步,随着要求的提高而增加表的请求容量,同时不会发生停机。您只需为您配置的请求容量支付低廉的费用,并让 Amazon DynamoDB 在足够的服务器容量上执行数据和流量分区工作,从而满足您的需求。将数据库管理的工作交给 Amazon DynamoDB 来打理,您只需要存储和请求数据即可。自动复制和故障转移功能实现了内置容错、高可用性和数据持久性。Amazon DynamoDB 确保您的数据库得到全面管理,并可随着应用程序要求的提高而扩展,令您高枕无忧。

尽管 Amazon DynamoDB 解决了数据库可扩展性、管理、性能和可靠性的核心问题,但数据模型与任何其他 NoSQL 一样,必须专为应用程序需要的访问模式而设计。也就是说,在 DynamoDB 上运行 adhoc 查询可能效率低下。请参阅相关设计指南,了解如何从任何关系数据库高效迁移到 DynamoDB。如果您的工作负载需要此功能,或者您寻求与现有关系引擎实现兼容,则您可能需要在 Amazon RDS 或 Amazon EC2 上运行关系引擎。虽然关系数据库提供稳健的特性和功能,但要在单个关系数据库实例的基础上扩展工作负载是非常复杂的,而且需要大量的时间和专业知识。因此,如果您预计到新应用程序的扩展要求,而且不需要使用关系功能,则 Amazon DynamoDB 可能是您的最佳选择。

问:Amazon DynamoDB 与 Amazon SimpleDB 有何区别?

我应该使用哪种服务?两种服务都属于非关系数据库,无需数据库管理过程。Amazon DynamoDB 专为无缝扩展、掌控高速性能量身定做。它在固态硬盘 (SSD) 上运行,以提供低延迟的响应时间,而且特定表的请求容量或存储大小不受限制。这是因为 Amazon DynamoDB 自动在足够数量的服务器上对您的数据和工作负载进行分区,以满足您的扩展要求。相比之下,Amazon SimpleDB 中的表受到 10GB 的严格存储限制,其能够达到的请求容量也受到限制(通常低于每秒 25 次写入操作);如果需要额外扩展,您还要负责管理数据在更多 SimpleDB 表上的分区和再分区。虽然 SimpleDB 受到扩展限制,但它是需要灵活查询的较小工作负载的理想之选。Amazon SimpleDB 自动索引所有项目属性,因而支持灵活查询,但会影响性能和可扩展性。

Amazon 首席技术官 Werner Vogels 的 DynamoDB 博客文章介绍了 Amazon 非关系数据库技术发展过程。

问:什么时候应该使用 Amazon DynamoDB,而不是使用 Amazon S3?

Amazon DynamoDB 存储按主键索引的结构化数据,实现对从 1 字节到 400KB 的项目的低延迟读取和写入访问。Amazon S3 存储非结构化 Blob,适合存储最大 5 TB 的大型数据元。为了优化您使用 AWS 服务的成本,应将大型数据元或不常访问的数据集存储在 Amazon S3 中,而最好将小型数据元素或文件指针(可能指向 Amazon S3 对象)保存在 Amazon DynamoDB 中。

问:任何操作系统下的应用程序是否都能使用 DynamoDB?

是的。DynamoDB 是一项完全托管的云服务,可以通过 API 使用。任何操作系统(例如 Linux、Windows、iOS、Android、Solaris、AIX、HP-UX 等)下的应用程序都可以使用 DynamoDB。我们建议借助 AWS SDK 初步掌握 DynamoDB。在开发人员资源页面中列有 AWS 软件开发工具包。如果您在安装或使用我们的软件开发工具包时遇到困难,请告诉我们,您可以将问题发布到相关的 AWS 论坛


问:数据模型是什么样的?

Amazon DynamoDB 的数据模型如下:

表:表是数据项的集合 – 就好比关系数据库中的表是行的集合。每个表具有无限数量的数据项。Amazon DynamoDB 是无架构的,因为表中的数据项不必具有相同的属性,甚至不必具有相同数量的属性。每个表必须具有一个主键。主键可以是单个属性键,也可以是组合了两个属性的“复合”属性键。每个项目都必须具有您指定为主键的属性,因为主键对表中的各个项目进行唯一标识。

项目:项目包括一个主键或复合键,以及数量不限的属性。与单个项目相关联的属性数量没有明确限制,但项目的总大小(包括所有属性名称和属性值)不得超过 400KB。

属性:与数据项相关联的每个属性包括属性名称(例如“Color”)以及一个值或一组值(例如“Red”或“Red、Yellow、Green”)。单个属性没有明确大小限制,但项目的总大小(包括所有属性名称和值)不得超过 400KB。

问:项目大小是否受到限制?

项目的总大小 (包括属性名称和属性值) 不得超过 400KB。请参阅设计指南,使用“复合排序键”设计大小超过 400K 限制的项目。

问:项目可具有的属性数量是否受到限制?

项目可以具有的属性数量不受限制。但是,项目的总大小(包括属性名称和属性值)不得超过 400KB。

问:有哪些 API?

  • CreateTable – 创建表并指定用于数据访问的主键。
  • UpdateTable – 为指定的表更新配置的吞吐量值。
  • DeleteTable – 删除表。
  • DescribeTable – 返回表大小、状态和索引信息。
  • ListTables – 返回与当前账户和终端节点相关联的所有表的列表。
  • PutItem – 创建新项目,或将旧项目替换为新项目(包括所有属性)。如果项目已存在于具有相同主键的指定表中,则新项目将会完全替换现有项目。您还可以使用条件运算符实现条件替换,即仅在项目的属性值符合特定条件时才替换项目,或仅在项目尚未存在时才插入新项目。
  • BatchWriteItem – 通过单个请求(而不是单个事务)插入、替换和删除多个表中的多个项目。支持对最多 25 个项目批量执行 Put 或 Delete 操作,最大总请求大小为 16MB。
  • UpdateItem – 编辑现有项目的属性。您还可以使用条件运算符实现条件更新,即仅在项目的属性值符合特定条件时才进行更新。
  • DeleteItem – 按主键删除表中的单个项目。您还可以使用条件运算符实现条件删除,即仅在项目的属性值符合特定条件时才删除项目。
  • GetItem – GetItem 运算符可为匹配主键的项目返回一组属性。默认情况下,GetItem 操作提供最终一致性读取。如果最终一致性读取不适用于您的应用程序,请使用 ConsistentRead。
  • BatchGetItem – BatchGetItem 操作可为使用主键的多个表中的多个项目返回属性。单个响应的大小限制为 16MB,最多返回 100 个项目。支持强一致性和最终一致性。
  • 查询 – 利用表主键,或利用索引键从二级索引中获取一个或更多项目。通过使用比较操作符或表达式,您可以缩小表格查询的范围。您还可以通过对非键属性使用筛选条件来筛选查询结果。支持强一致性和最终一致性。单个请求的大小限制为 1MB。
  • 扫描 – 通过对表或二级索引执行全面扫描来获取所有项目和属性。您可以通过针对一个或多个属性指定过滤条件来限制返回结果集。

问:什么是扫描操作的一致模型?

答:扫描操作支持最终一致性读取和一致性读取。默认情况下,扫描操作具有最终一致性。不过,您可以在 Scan API 调用中使用可选的 ConsistentRead 参数,修改一致性模型。将 ConsistentRead 参数设为 true 后,您可以通过扫描操作进行一致性读取。有关详细信息,请参阅扫描操作的相关文档

问:扫描操作的工作原理是什么?

您可将扫描操作视为迭代器。一旦特定 Scan API 请求的扫描项目的总大小超过 1MB 限制,则该特定请求将被终止,提取的结果将与 LastEvaluatedKey 一同返回(以便在后续操作中继续扫描)。

问:扫描操作是否有任何限制?

每次对表或二级索引执行扫描操作时都不能超过 1MB 的大小限制。超过 1MB 的限制后,它将停止操作并返回到该点为止的匹配结果以及后续操作中要应用的 LastEvaluatedKey,这样您可以在停止的位置恢复操作。

问:一次扫描操作要消耗多少个读取容量单位?

答:所需的读取单位是用扫描操作捕获到的字节数(四舍五入到最接近的 4KB)除以 4KB。采用一致性读取方式扫描表格占用的读取容量是采用最终一致性读取方式进行扫描的两倍。

问:DynamoDB 支持哪些数据类型?

DynamoDB 支持四种标量数据类型:数字、字符串、二进制和布尔。此外,DynamoDB 支持集合数据类型:数字集、字符串集、二进制集、异质链表和异质映射。DynamoDB 还支持 NULL 值。

问:DynamoDB 支持哪些类型的数据结构?

DynamoDB 支持键-值和文档数据结构。

问:什么是键-值存储?

键-值存储是一项数据库服务,支持存储、查询和更新对象集合,使用包含所存储实际内容的键和值进行识别。

问:什么是文档存储?

文档存储支持以 JSON、XML 和 HTML 等文档格式存储、查询和更新项目。

问:DynamoDB 是否具有 JSON 数据类型?

否,但您可以使用文档软件开发工具包将 JSON 数据直接传输到 DynamoDB 中。DynamoDB 数据类型是受 JSON 支持的数据类型超集。文档软件开发工具包可将 JSON 文档自动映射到本地 DynamoDB 数据类型。

问:我能否使用 AWS 管理控制台查看和编辑 JSON 文档?

能够。AWS 管理控制台提供简单的用户界面,用于探索并编辑 DynamoDB 表中存储的数据,包括 JSON 文档。如需查看或编辑表中的数据,请登录 AWS 管理控制台,选择 DynamoDB,选择您要查看的表,然后单击“探索表”按钮。

问:查询 DynamoDB 中的 JSON 数据是否有不同?

没有。您可以在任何顶级 JSON 元素上创建全局二级索引或本地二级索引。举例来说,假设您存储的 JSON 文档中包含关于人的下列信息:名、姓氏、邮政编码及他们的所有好友列表。名、姓氏和邮政编码为顶级 JSON 元素。您可以创建一个索引让您根据名、姓氏或邮政编码进行查询。好友列表不是顶级元素,因此您不能索引该好友列表。有关全局二级索引及其查询功能,请参阅常见问题中的二级索引部分。

问:如果我的 DynamoDB 中有嵌套 JSON 数据,我能否只检索该数据的特定元素?

能。当使用 GetItem、BatchGetItem、Query 或 Scan API 时,您可以定义一个 ProjectionExpression 以确定应从表中检索哪些属性。这些属性可包括 JSON 文档的标量、集或元素。

问:如果我的 DynamoDB 中有嵌套 JSON 数据,我能否只更新该数据的特定元素?

能。当更新 DynamoDB 项目时,您可以指定您要更新的 JSON 文档的子元素。

问:什么是文档软件开发工具包?

文档软件开发工具包是 JavaScript 的数据类型包装器,可以轻松实现 JS 和 DynamoDB 数据类型之间的相互操作。使用此软件开发工具包,您可以处理请求的包装。响应与之类似,可以对数据类型进行解包。如需更多信息并下载软件开发工具包,请参考此处的 GitHub 存储库。

 


问:我能够存储在 Amazon DynamoDB 中的数据量是否受到限制?

不是。您在 Amazon DynamoDB 表中存储的数据量不受任何限制。随着您的数据集大小的增加,Amazon DynamoDB 将自动在足够的机器资源上分布您的数据,以满足您的存储要求。

问:单个表的吞吐量是否有限制?

没有。您可以使用 API 或 AWS 管理控制台提高 Auto Scaling 的最大容量限制设置,或提高您为表手动预置的吞吐量。DynamoDB 能够大容量运行,您可以达到的最大吞吐量没有理论上的限制。DynamoDB 自动将表分为多个分区,其中每个分区都是一个独立的并行计算单元。DynamoDB 可以通过添加更多分区,不断提高吞吐率。

如果您希望吞吐率超过每秒 10000 次写入或每秒 10000 次读取,请首先填写此在线表格与 Amazon 联系

问:当 Auto Scaling 触发扩展时或当我通过更改预置吞吐量来请求增加或减小吞吐量时,Amazon DynamoDB 是否保持可用?

是。Amazon DynamoDB 能够在增加或减少其预置吞吐量时保持可用,无论它是由 Auto Scaling 管理还是手动管理。

问:使用 Amazon DynamoDB 时是否需要管理客户端分区?

不是。Amazon DynamoDB 不需要跨数据库表进行分区以实现吞吐量可扩展性。

问:Amazon DynamoDB 的可用性有多高?

该服务运行于 Amazon 经过实践检验的高可用性数据中心。该服务在 AWS 区域的三个设施上复制数据,以便在发生服务器故障或可用区域运行中断时提供容错保护。

问:Amazon DynamoDB 如何实现很高的正常运行时间和持久性?

为了实现很高的正常运行时间和持久性, Amazon DynamoDB 在 AWS 区域的三个设施上同步复制数据。


问:什么是 DynamoDB Auto Scaling?

DynamoDB Auto Scaling 是一项完全托管的功能,可随着应用程序请求的增加或减少,自动增加或减少 DynamoDB 表或全局二级索引的预置读取和写入容量。

问:为何需要使用 Auto Scaling?

借助 Auto Scaling,您在创建新表时就不必为预置足够的容量进行猜测,并可减轻持续监控已使用的吞吐量和手动调整预配置容量的操作负担。Auto Scaling 还可确保应用程序的可用性,并降低未使用的预置容量产生的成本。

问:哪些应用程序请求模式和工作负载适合使用 Auto Scaling?

Auto Scaling 非常适合统一、可预测的请求模式,这些模式的吞吐使用情况忽高忽低且持续数分钟到数小时不等。

问:我该如何为 DynamoDB 表或全局二级索引启用 Auto Scaling?

在创建新表时,请从 DynamoDB 控制台中选中“使用默认设置”选项,以启用 Auto Scaling,并向全局二级索引和表应用相同的设置。如果取消选中“使用默认设置”,您可以手动设置预置的容量,或启用 Auto Scaling,使用自定义值来设置目标利用率以及最小和最大容量。对于现有表,您可以启用 Auto Scaling,或通过导航至“容量”选项卡更改现有的 Auto Scaling 设置;对于索引,您可以在“索引”选项卡下启用 Auto Scaling。此外,您还可以使用 CLI 或 AWS 开发工具包以编程方式托管 Auto Scaling。请参阅 DynamoDB 开发人员指南,了解更多信息。

问:我可以为 Auto Scaling 配置哪些设置?

Auto Scaling 有三种可配置设置:目标利用率、某一时间点实际使用的吞吐量占总预置吞吐量的百分比,以及 Auto Scaling 的最小容量与可最大容量的范围。目标利用率的默认值为 70% (允许的范围为 20% – 80%,以百分之一为增量),最小容量为 1 个单位,最大容量以该地区内您账户的表的限制为准。请参阅 DynamoDB 的限制页面,了解地区级别默认的表限制。

问:是否可以更改现有 Auto Scaling 策略的设置?

可以。您可以随时更改现有 Auto Scaling 策略的设置,方法是导航至管理控制台中的“容量”选项卡,或使用 AutoScaling API 通过 CLI 或开发工具包以编程方式更改。

问:Auto Scaling 的工作原理是什么?

当您为 DynamoDB 表创建新的 Auto Scaling 策略时,Amazon CloudWatch 将创建一条警报,内含您指定的目标利用率的阈值,该阈值根据发布到 CloudWatch 的已使用和预置的容量指标进行计算。在特定时间范围内,如果表的实际利用率与目标有偏差,那么 CloudWatch 警报将激活 Auto Scaling,Auto Scaling 将评估您的策略,并随之向 DynamoDB 发出 UpdateTable API 请求,以动态地增加 (或减少) 表的预置吞吐容量,从而使实际利用率更接近目标。

问:是否可以在多个地区的多个表中启用单个 Auto Scaling 策略?

不可以。单个 Auto Scaling 策略只能针对单个地区内的单个表或单个全局索引进行设置。

问:是否可以强制执行 Auto Scaling 策略,以即时增加至最大容量或减少至最小容量?


不可以。Auto Scaling 不支持即时增加至最大容量或减少至最小容量。不过,您可以暂时禁用 Auto Scaling,手动设置您在要求的时长内所需的容量,稍后重新启用 Auto Scaling。

问:在何处可以监控 Auto Scaling 触发的缩放操作?

您可以在管理控制台的“容量”选项卡和“指标”选项卡下的 CloudWatch 图表中,监控 Auto Scaling 触发的缩放操作的状态。

问:如何确定表格是否具有活动的 Auto Scaling 策略?

从 DynamoDB 控制台中,单击左侧菜单中的“表”,以显示您账户中所有 DynamoDB 表的列表视图。对于具有活动 Auto Scaling 策略的表,“Auto Scaling”列会显示“READ_CAPACITY”、“WRITE_CAPACITY”或“READ_AND_WRITE”,具体取决于 Auto Scaling 是针对读取、写入还是同时针对两者启用。此外,在表的“概览”选项卡的“表详细信息”部分,预置的容量标签会显示 Auto Scaling 是针对读取、写入还是同时针对两者启用。

问:删除具有活动策略的表或全局二级索引后,Auto Scaling 策略会发生什么?

在您从控制台中删除表或全局二级索引后,其 Auto Scaling 策略和支持的 Cloud Watch 警报也将被删除。

问:使用 Auto Scaling 需要支付额外费用吗?

不需要。除了您已为 DynamoDB 和 CloudWatch 警报支付的费用之外,使用 Auto Scaling 无需任何额外费用。要了解有关 DynamoDB 定价的信息,请访问 DynamoDB 定价页面

问:Auto Scaling 托管的吞吐容量如何使用预留容量?

Auto Scaling 使用预留容量的方式与目前使用手动预置的吞吐容量的方式相同。预留容量会计入您购买容量所在地区的总预置容量。Auto Scaling 预置的容量将首先使用预留容量,并按照打折后的价格计费,任何过剩容量都将按照标准费率付费。要将总使用量限制为您购买的预留容量,请为启用了 Auto Scaling 的所有表分配最大容量限制,该限制应累计少于您已购买的总预留容量。


问:什么是全局二级索引?

全局二级索引是包含不同于表的主键的分区键或分区-和-排序键的索引。

为对表中的数据进行高效访问,Amazon DynamoDB 针对主键属性创建并维护其索引。这可以让应用程序通过指定主键值快速地检索数据。但是,包含一个或多个二级(或替代)键也能使许多应用程序受益,因为这可以让它们更高效地访问其属性与主键不同的数据。要实现这一目的,您可以在表中创建一个或多个二级索引,并对这些索引发出 Query 请求。

Amazon DynamoDB 支持两种类型的二级索引:

  • 本地二级索引 – 分区键与表相同但排序键不同的索引。本地二级索引之所以称为“本地”,是因为该索引的每个分区的范围都限定为具有相同分区键的表分区。
  • 全局二级索引 – 分区键或分区-和-排序键可与表中的这些键不同的索引。全局二级索引之所以称为“全局”,这是因为该索引上的查询可跨过所有分区,涵盖表中的所有项目。 

二级索引由 Amazon DynamoDB 以稀疏数据元的形式自动维护。只有当项目存在于定义索引所引用的表中,它们才会出现在索引中。这使得按索引进行查询变得非常高效,因为索引中的项目数通常远远少于表中的项目数。

全局二级索引支持非唯一属性,它允许在表中按任何非键属性进行查询,从而提高了查询的灵活性。

比如说,某个游戏应用程序将玩家信息存储在 DynamoDB 表中,该表的主键由 UserId(分区)和 GameTitle(排序)组成。项目中包含名称为 TopScoreTimestampZipCode 的属性,以及其他一些属性。创建表以后,DynamoDB 在主键上提供隐式索引(主索引),以便能够高效地查询并返回某个特定用户在所有游戏中获得的最高分。

但是,如果应用程序需要获得用户在某个特定游戏中的最高分,则使用这种主索引查询的效率极低,并且需要在整个表中进行扫描。反之,以 GameTitle 为分区键元素并以 TopScore 为排序键元素的全局二级索引能让应用程序快速检索某个游戏的最高分。

GSI 不需要排序键元素。例如,您的 GSI 可以拥有一个只带分区元素 GameTitle 的键。在以下示例中,GSI 没有投影属性,因此它只会返回属性与您正在查询的 GameTitle 相匹配的所有项目(通过主键识别)。

问:全局二级索引应该在什么时候使用?

全局二级索引尤其适用于追踪具有很多不同值的属性之间的关系。例如,您可以创建 DynamoDB 表并将 CustomerID 用作该表的主分区键,将 ZipCode 用作全局二级索引的分区键,因为邮政编码的数量很多,而且您可能会拥有很多客户。使用主键,您可以快速获得任何客户的相关记录。使用全局二级索引,您可以高效查询居住在指定邮政编码地区的所有客户。

为了确保充分利用全局二级索引的能力,请参阅我们提供的有关统一工作负载的最佳实践文档

问:如何为 DynamoDB 表创建全局二级索引?

可以随时指定与表关联的 GSI。欲了解创建表及其索引的具体步骤,请参阅此处。您最多可以为每个表创建 5 个全局二级索引

问:DynamoDB 的本地版本支持全球二级索引吗?

是的。DynamoDB 的本地版本可用于开发和测试 DynamoDB 支持的应用程序。您可以在此下载 DynamoDB 的本地版本。

问:什么是投影属性?

二级索引中的数据包括从表投影或复制到索引中的属性。创建二级索引时,您需要定义该索引的替代键,以及您希望投影到该索引的其他任何属性。Amazon DynamoDB 会将这些属性复制到索引中,并从表中复制主键属性。然后,您可以查询该索引,就像查询表一样。

问:是否可以在非唯一属性上定义全局二级索引键?

是的。与表中的主键不同的是,GSI 索引不要求索引属性具有唯一性。例如,GameTitle 上的 GSI 可将所有项目编入索引,以追踪用户在每个游戏中的得分。在此示例中,通过查询 GSI 可以返回玩过“TicTacToe”游戏的所有玩家。

问:全局二级索引与本地二级索引有何不同?

全局二级索引和本地二级索引都能提高查询的灵活性。LSI 与特定的分区键值相关联,而 GSI 则可以涵盖所有的分区键值。由于具有相同分区键值的项目在 DynamoDB 中共享同一分区,所以“本地”二级索引只包含存储在同一位置(相同分区)的项目。因此,LSI 可用于查询分区键值相同但排序键值不同的项目。例如,假设有某个用于追踪客户订单的 DynamoDB 表,其中 CustomerId 为分区键。

OrderTime 上建立的 LSI 可以高效地查询并检索出特定客户最近订购的产品。

相比之下,GSI 并不局限于具有共用分区键值的项目。相反,GSI 与主键一样,可以跨越表的所有项目。在上表中,在 ProductId 上建立的 GSI 可用于高效地查找特定产品的全部订单。请注意,本示例中没有指定 GSI 排序键,即使可能有很多订单的 ProductId 相同,它们也将作为单独的项目存储在 GSI 中。

为了确保表和索引中的数据共处于同一个分区,LSI 将每个分区键值的全部元素(表和索引)的总大小限制为 10GB。GSI 不强行要求数据共处,且不做任何此类限制。

当您向表中写入内容时,DynamoDB 自动更新所有受影响的 LSI。相反地,对于表中定义的任何 GSI 进行的更新最终会保持一致。

LSI 允许 Query API 检索投影列表之外的属性。这不是 GSI 支持的行为。

问:全局二级索引是如何工作的?

GSI 的行为方式在许多方面与 DynamoDB 表相似。您可以使用 GSI 的分区键元素查询 GSI,同时对排序键元素使用条件筛选器。然而,两者又有不同,DynamoDB 表的主键必须是唯一的,而 GSI 键可以由多个项目共用一个。如果存在具有同一 GSI 键的多个项目,则将按单独的 GSI 项目对其进行追踪,并且 GSI 查询会将它们作为单独的项目全部检索出来。当增加、删除或更新项目时,DynamoDB 会在内部确保 GSI 的内容得到相应地更新。

DynamoDB 将 GSI 的投影属性存储在 GSI 数据结构中,同时还存储了 GSI 键和匹配项目的主键。GSI 使用源表中的投影项目的存储。这可以确保根据 GSI 而不是表进行查询,从而提高查询的灵活性并改进工作负载的分配。因此,查询 GSI 索引不会返回:属于表中项目的一部分,但不属于 GSI 键的属性、该表的主键以及投影属性。如果应用程序需要在查询 GSI 后从表中获得其他数据,则可从 GSI 中检索主键,然后使用 GetItemBatchGetItem API 从表中检索需要的属性。由于 GSI 具有最终一致性,所以使用此模式的应用程序必须要考虑在 GSI 和 GetItem/BatchItem 调用期间项目被删除(从表中删除)的问题。

当对表进行相应更改时,DynamoDB 将自动处理 GSI 中的项目增加、更新和删除。将某个项目(具有 GSI 键属性)添加到表中时,DynamoDB 会对 GSI 进行异步更新,以增加此新项目。同样地,将某个项目从表中删除时,DynamoDB 会从受影响的 GSI 中删除该项目。

问:是否可以为基于分区的表和分区-排序结构表创建全局二级索引?

可以,无论 DynamoDB 表拥有何种类型的主键,您都可以创建全局二级索引。该表的主键可能只包括一个分区键,也可能同时包括分区键和排序键。

问:全局二级索引的一致性模型是什么?

GSI 支持最终一致性。在表中插入或更新项目时,GSI 不会同步更新。在正常操作条件下,向全局二级索引的写入操作将在几分之一秒内得到传播。在极少数故障情况下,时间可能会延长。正因如此,您的应用程序逻辑应具备相应的能力,以处理可能过期的 GSI 查询结果。请注意,对于其他支持最终一致性读取的 DynamoDB API,它们也具有与此相同的行为。

比方说,有一个用于追踪最高分的表,该表中每个项目都具有 UserIdGameTitleTopScore 属性。主分区键是 UserId,主排序键是 GameTitle。如果应用程序为 GameTitle“TicTacToe”和 UserId“GAMER123”添加了一个新的最高分的项目,随后再查询 GSI,则这个新分数可能不在查询结果之列。不过,一旦完成 GSI 传播,该新项目即开始出现在对 GSI 的此类查询中。

问:是否可以单独预配置表和每个全局二级索引的吞吐量?

是的。GSI 管理的吞吐量与它们所依托的表无关。当您从控制台中为新表或现有表启用 Auto Scaling 时,可以将相同设置应用于 GSI。您还可以为表和全局二级索引手动预置不同的吞吐量。

根据应用程序的不同,GSI 的请求工作负载与表或其他 GSI 的请求工作负载可能有很大差别。以下列出的几种情形便体现了这种差别:

  • 与表相比,包含极少表项目的 GSI 需要的写入吞吐量要低得多。
  • 与表相比,用于查找非经常性项目的 GSI 需要的读取吞吐量要低得多。
  • 需大量读取操作的后台任务所用的 GSI 每天有几小时可能需要较高的读取吞吐量。

随着您的需求的发展,您可以更改 GSI 的预配置吞吐量,这与表的预配置吞吐量无关。

比如某个 DynamoDB 表,它的 GSI 投影了所有属性,并且该表中 50% 的项目都有 GSI 键。在这种情况下,GSI 的预配置写入容量单位应设置为表的预配置写入容量单位的一半。使用类似的方式可以估算出 GSI 的读取吞吐量。请参阅 DynamoDB GSI 文档,以了解更多详细信息。

问:增加全局二级索引会对表的预配置吞吐量和存储造成怎样的影响?

类似于 DynamoDB 表,在对 GSI 执行读取或写入操作时,它会使用预配置吞吐量。增加或更新 GSI 项目的写入操作将根据更新的大小使用写入容量单位。除了更新表中项目需要的容量之外,GSI 写入操作也要使用容量。

请注意,如果您在 DynamoDB 表中增加、删除或更新项目且这一操作不会导致 GSI 发生变化,则 GSI 将不会使用任何写入容量单位。在以下条件时会发生这种情况:向 DynamoDB 表增加不含任何 GSI 键属性的项目;或在不更改任何 GSI 键或投影属性的情况下更新项目。

查询 GSI 时,会根据查询所检索的项目大小来使用读取容量单位。

GSI 的存储成本基于该 GSI 中所存储的字节总数。这包括 GSI 键与投影属性和值,以及用于编制索引而损耗的 100 字节。

问:DynamoDB 能否因 GSI 的预配置吞吐量而限制应用程序对表的写入操作?

由于对 DynamoDB 表的部分或全部写入操作会同时导致对关联 GSI 的写入,因此 GSI 的预配置吞吐量可能会耗尽。在此情况下,后续对表的写入操作将受到限制。即使该表仍有可用的写入容量单位,这种情况也可能发生。

问:我可以多长时间在索引级更改一次预配置吞吐量?

带有 GSI 的表对于吞吐量更改次数的每日限制与普通表是相同的。

问:DynamoDB 全局二级索引是如何收费的?

根据表及其 GSI 的合计预配置吞吐量,按小时向您收费。如果您是手动预置,尽管不作要求,仍会根据表及其 GSI 的合计预置吞吐量,按小时向您收费。此外,还将向您收取 GSI 所使用的数据存储的费用,以及标准的数据传输 (外部) 费用。如果您想更改 GSI 的预置吞吐容量,可使用 DynamoDB 控制台UpdateTable APIPutScalingPolicy API 来更新 Auto Scaling 策略设置,以执行此操作。

问:能够指定用于查询的全局二级索引?

是的。除了常见的查询参数之外,GSI 的查询指令还明确包含对其进行操作的 GSI 的名称。请注意,一次查询只能使用一个 GSI。

问:全局二级索引支持哪些 API 调用?

GSI 支持的 API 调用包括 QueryScan。Query 操作只搜索索引键属性值,并且支持比较运算符的子集。由于 GSI 是异步更新,所以您不能使用 ConsistentRead 参数进行查询。请查看此处了解有关使用 GSI 进行查询和扫描的详细信息。

问:在全局二级索引扫描中,结果是怎么排列的?

对于全局二级索引,当采用仅分区键架构时,不会发生排序问题。对于具有分区-排序键架构的全局二级索引,同一分区键检索结果的排序是根据排序属性决定的。

问:我能否在创建表之后更改全局二级索引?

能,可以随时更改全局二级索引,甚至在创建表之后。

问:我如何在现有的表中添加全局二级索引

您可以通过控制台或 API 调用添加全局二级索引。在 DynamoDB 控制台上,首先选择您要添加全局二级索引的表,然后点击“创建索引”按钮以添加新索引。按照索引创建向导中的步骤,并在完成时选择“创建”。您还可以通过 GlobalSecondaryIndexes 参数使用 UpdateTable API 调用添加或删除全局二级索引。您可以阅读文档页面来了解更多信息。

问:如何删除全局二级索引?

您可以通过控制台或 API 调用删除全局二级索引。在 DynamoDB 控制台上,选择您要删除的全局二级索引所在的表。然后,选择“表项目”下的“索引”选项卡,并点击下面的“删除”按钮以删除索引。您还可以使用 UpdateTable API 调用删除全局二级索引。您可以阅读文档页面了解更多信息。

问:能否通过一次 API 调用添加或删除同一个表中的多个索引?

每个 API 调用只能添加或删除一个索引。

问:如果我提交多个请求来添加同一个索引,会出现什么情况?

只会接受第一个添加请求,所有后续添加请求将失败,直到第一个添加请求完成为止。

问:我能否同时添加或删除同一个表中的多个索引?

不能,任何时候,一个表中都只能有一个活跃的添加或删除索引操作。

问:是否应该预配置额外的吞吐量以添加全局二级索引?

建议您使用 Auto Scaling,将与表相同的设置应用于全球二级索引。如果您是手动进行预置,那么尽管不作要求,我们仍然强烈建议您预置与索引的吞吐量分离的额外写入吞吐量。如果您不额外预配置写入吞吐量,将消耗索引的写入吞吐量来添加新索引。这样在创建新索引时,会影响索引的写入性能,也会增加创建新索引的时间。

问:创建索引后,我是否必须减少全局二级索引的额外吞吐量?

是,一旦过程完成,您就必须回拨为添加索引而额外预配置的写入吞吐量。

问:我能否修改为添加全局二级索引而预配置的写入吞吐量?

能,您可以在创建过程中随时上拨或下拨索引创建转用预配置写入吞吐量。

问:在添加或删除全局二级索引时,表是否仍可用?

是,更新全局二级索引时该表可用。

问:添加或删除全局二级索引时,现有索引是否仍然可用?

是,当更新全局二级索引时现有索引可用。

问:创建添加全局二级索引时,新索引是否可用?

否,新索引只在索引创建过程完成后才可用。

问:添加全局二级索引需要多长时间?

时长取决于表的大小和为创建全局二级索引而额外预置的写入吞吐量的数量。添加或删除索引的过程要花费几分钟到几个小时不等。例如,假设您有一个预配置了 500 写入容量单位的 1GB 表,并为索引和新索引创建预配置了 1000 个额外的写入容量单位。如果新索引包含表中的所有属性,且该表使用所有的写入容量单位,我们预计索引创建将花费 30 分钟左右。

问:删除全局二级索引需要花费多久?

索引的删除一般在几分钟内完成。例如,删除具有 1GB 数据的索引一般要不了 1 分钟。

问:如何追踪全局二级索引的添加或删除操作进度?

您可以使用 DynamoDB 控制台或 DescribeTable API 查看与表相关的所有索引的状态。对于添加索引操作,正在创建索引时,索引的状态为“创建中”。一旦索引的创建完成,索引状态会从“创建中”变成“活跃”。对于删除索引操作,请求完成时,删除的索引将不复存在。

问:添加全局二级索引的索引创建过程完成时,我是否会收到通知?

您可以请求向您的电子邮件地址发送通知,以确认索引添加已完成。当您通过控制台添加索引时,您可以请求在创建索引前在最后一步发送通知。当索引创建完成时,DynamoDB 将向您的电子邮件发送 SNS 通知。

问:当我在已经有 5 个索引时尝试添加更多的全局二级索引时,会出现什么情况?

您目前的限制为 5 个 GSI。“添加”操作将失败,且您将收到一个错误提示。

问:我能否在具有同样名称的索引被删除后重用全局二级索引的名称?

能,删除了全局二级索引后,在添加新索引时,可以再次使用该索引名称。

问:我能否在索引创建时取消索引添加?

否,索引创建一旦开始,就不能取消索引创建过程。

问:是否所有的 DynamoDB 表项目都需要 GSI 键属性?

不是。GSI 是稀疏索引。与那些要求包含主键的项目不同,DynamoDB 表中的项目不必包含任何 GSI 键。如果某个 GSI 键同时包含分区和排序元素,但某个表项目遗漏了其中一个元素,则该项目不会被对应的 GSI 编入索引。在此情况下,GSI 对于高效地查找具有稀有属性的项目非常有用。

问:是否能从全局二级索引中检索 DynamoDB 表的全部属性?

GSI 查询只能返回在创建时就指定包含在 GSI 中的属性。GSI 中包含的属性是指默认投影的属性,如 GSI 的键属性和表的主键属性,以及用户指定要投影的属性。出于此原因,对于那些属于表的一部分,但又未包含在 GSI 中的项目,GSI 查询不会返回其属性。将所有属性指定为投影属性的 GSI 可用于检索任何表属性。请参阅此处,以了解有关使用 GSI 进行查询的文档说明。

问:如何列出与表相关的 GSI?

DescribeTable API 可返回有关表中的全局二级索引的详细信息。

问:哪些数据类型可以进行索引?

所有标量数据类型(数字、字符串、二进制和布尔)均可用于本地二级索引键的排序键元素。集、列表和映射类型不能索引。

问:是否存在复合属性索引?

不存在。但您可以将属性连结到一个字符串中,并将其作为键。

问:哪些数据类型可以成为 GSI 的投影属性的一部分?

您可以指定将带有任何数据类型(包括集合类型)的属性投影到 GSI 中。

问:GSI 在扩展性上有哪些注意事项?

关于 DynamoDB 表的主键的性能注意事项同样适用于 GSI 键。GSI 在所有键上采取一种相对随机的访问模式。为了充分利用二级索引预置的吞吐量,您选择的 GSI 分区键属性应该包含大量不同的值,而选择的 GSI 排序键属性应该非常均匀地被请求,越随机越好。

问:CloudWatch 将会为全局二级索引提供哪些新指标?

带有 GSI 的表将为该表和 GSI 提供聚合指标,也会为该表和每个 GSI 提供分类汇总指标。

单个 GSI 的报告将用于支持 CloudWatch 指标(由表提供支持)的子集。其中包括:

  • 读取容量(预配置读取容量、使用的读取容量)
  • 写入容量(预配置写入容量、使用的写入容量)
  • 限制的读取事件
  • 限制的写入事件

有关 DynamoDB 表和索引支持的指标的更多详细信息,请参阅此处

问:如何扫描全局二级索引?

全局二级索引可通过控制台或扫描 API 进行扫描。

如需扫描全局二级索引,除您想要扫描的表名称外,还须明确引用索引。您必须指定索引分区属性名称和值。您可以针对索引键排序属性选择性地指定条件。

问:全局二级索引扫描是否允许我在要返回的结果集中指定非投影属性?

全局二级索引扫描将不支持抓取非投影属性。

问:是否将会支持索引并行扫描?

是的,我们将支持并行扫描索引,并且语义与主表的相同。


问:什么是本地二级索引?

通过本地二级索引可以进行一些常规的查询操作,从而实现运行速度加快且运行成本最优,否则,其将需要检索大量项目,然后再对结果进行筛选。这表示您的应用程序可以基于更广泛属性进行更灵活的查询。

启动本地二级索引前,如果您想在某个分区查找特定项目(共享同一分区键的项目),DynamoDB 将提取共享单一分区键的所有对象,然后对结果进行相应筛选。以某种电子商务应用程序为例,它将用户订单数据存储在 DynamoDB 表中,该表采用客户 ID-订单时间戳这种分区-排序架构。在没有 LSI 的情况下,如果要“显示客户 X 提交的发货日期在最近 30 天内的所有订单,按发货日期予以排序”,您必须使用 Query API 来检索分区键“X”下的所有对象,按照发货日期对结果进行排序,然后过滤掉较早的记录。

借助本地二级索引,我们就可以简化上述操作了。现在,您可以在“发货日期”属性上创建索引,并有效执行此查询,仅需检索必需项即可。由于您只需检索符合您所需特定标准的项目,因此大大减少了等待时间和查询成本。此外,由于您无需再写入自定义逻辑来筛选结果,因此,这一操作还简化了应用程序的编程模型。我们将这种新二级索引称为“本地”二级索引,由于它与分区键结合使用,因此您可以在分区键存储桶内进行本地搜索。这样一来,即使以前您或许只能借助分区键和排序键进行搜索,但现在,您还可以使用二级索引代替排序键进行搜索,从而增加了能够用于有效查询的属性数量。

可以将数据属性的冗余备份复制到您定义的本地二级索引中。这些属性包括表分区和排序键,以及您定义的备用排序键。您还可以将其他数据属性重复存储在本地二级索引中,从而在无需访问表本身的情况下,即可实现访问这些其他属性。

本地二级索引并非适用于所有应用程序。它们会对您可以在单一分区键数值中存储的数据量有一些限制。如需更多信息,请参阅下面有关项目集合的常见问题。

问:什么是投影?

被复制到本地二级索引中的属性集称为“投影”。投影将确定您能够以最高效方式进行检索的属性。查询本地二级索引时,Amazon DynamoDB 可以访问任意具有相同性能特点的投影属性,此操作与访问其自身表中的属性方式相同。如果您需要检索尚未投影的任意属性,那么 Amazon DynamoDB 会自动从表中将这些属性提取出来。

定义本地二级索引后,您需要指定投影到索引的属性。每个索引条目至少应包括:(1) 表分区键值,(2) 用作索引排序键的属性,以及 (3) 表排序键值。

除此之外,您还可以选择用户指定其他非键属性,将其投影到索引。您还可以选择将所有属性投影到索引,在这种情况下,索引将复制与表相同的数据,但此数据按照您指定的备用排序键进行组织。

问:如何创建 LSI?

您需要在表创建时创建 LSI。随后将无法添加。如需创建 LSI,请指定以下两项参数:

索引排序键 – 将被索引和查询的属性。

投影属性 – 表中的属性列表,可直接将其复制到本地二级索引中,因此这些属性返回速度更快,且无需从包含表的所有项的主索引中提取数据。没有投影属性的情况下,本地二级索引仅含主索引和二级索引键。

问:什么是适用于 LSI 的一致性模型?

主索引更新时,本地二级索引将自动进行更新。与从主索引读取相似,LSI 支持强和最终一致性读取选项。

问:本地二级索引包含对表中所有项的引用吗?

不一定。本地二级索引仅引用包含针对该 LSI 指定的索引排序键的项目。DynamoDB 的灵活架构意味着并非所有项目都一定要包含所有属性。

这表示相较于主索引,本地二级索引可进行稀疏填充。由于本地二级索引稀疏,因此可有效用于支持不常见属性的查询。

例如,在上述订单示例中,客户的一个项目中可能包含若干附加属性,且仅在订单取消的情况下包括这些属性(例如 CanceledDateTime、CanceledReason)。针对已取消项目的查询,由于索引中引用的项目仅为拥有现有属性的项目,因此,任何这些属性上的本地二级索引均有效。

问:如何查询本地二级索引?

仅可通过 Query API 查询本地二级索引。

如需查询本地二级索引,除您想要查询的表名称外,还须明确引用索引。您必须指定索引分区属性名称和值。您可以针对索引键排序属性选择性地指定条件。

您的查询可检索主索引中存储的非投影属性,其方式为执行表提取操作,且其需要占用附加读取容量单位。

强一致性和最终一致性读取均支持利用本地二级索引的查询操作。

问:如何创建本地二级索引?

必须在创建表时定义本地二级索引。表的主索引必须使用分区-排序复合键。

问:能够将本地二级索引添加至现有的表中吗?

不,现在还不可以将本地二级索引添加至现有表中。我们正在努力研究添加这一功能,并在将来予以发布。创建带有本地二级索引的表后,您可以通过定义当前不可用的排序键元素来创建本地二级索引,以供日后使用。由于本地二级索引不密集,因此您在决定使用该索引前无需付出任何成本。

问:能够在一个表中创建多少本地二级索引呢?

每个表可以拥有多达 5 个本地二级索引。

问:能够在一个表中创建多少投影非键属性呢?

按照表中所有本地二级索引进行统计,每个表可以拥有多达 20 个投影非键属性。每个索引还可以指定来自投影主索引的所有非键属性。

问:索引创建后能修改吗?

不可以,索引一旦创建就不能修改了。我们正在努力研究,以便在未来添加这一功能。

问:能删除本地二级索引吗?

不可以,目前,一旦创建就无法从表中删除本地二级索引。当然,如果您要删除整个表,则可以将其删除。我们正在努力研究添加这一功能,并在将来予以发布。

问:本地二级索引如何占用预配置容量?

您无需为本地二级属性特别配置容量。它将占用与其关联的表一部分配置容量。

按照每 1KB 数据 1 个单位的标准公式,从 LSI 读取数据时所耗容量与用 LSI 向表中写入数据时所耗容量的差异如下:

写入包含与一个或以上本地二级索引相关的数据时,这些写入将会镜像复制到相应的本地二级索引上。在这些情况下,写入容量将被表本身所占用,而各个相关 LSI 将占用额外的写入容量。

对于覆盖了现有项的更新,它会导致发生两项操作:删除和插入,由此每 1KB 数据将占用额外的写入容量单位。

当读取查询请求尚未投影至 LSI 的属性时,DynamoDB 将从主索引提取这些属性。该隐式 GetItem 请求每提取 4KB 数据时,将占用一个读取容量单位。

问:本地二级索引会占用多少存储空间?

对于所有投影非键属性,本地二级索引将占用属性名称以及每个 LSI 主键和索引键值的存储空间。此外,每在 LSI 反映一个项目,则增加 100 字节的存储空间。

问:哪些数据类型可以进行索引?

所有标量数据类型(数字、字符串、二进制)均可用于本地二级索引键的排序键元素。不能使用数据集类型。

问:哪些数据类型可投影入本地二级索引?

所有数据类型(包括设置类型)均可投影入本地二级索引。

问:什么是项目集合及其如何与 LSI 关联?

在 Amazon DynamoDB 中,项目集合是表及其所有二级索引中拥有相同分区键项目的组合。传统的分区(或分享)关系数据库系统将其称为“分享”或“分区”,指的是分区键下存储的所有数据库项或行。

对于每个包括本地二级索引的表,其项目集合都是自动创建并维护的。DynamoDB 会将所有项目集合存储在单一磁盘分区。

问:项目集合的大小有限制吗?

Amazon DynamoDB 中所有项目集合的大小不得超过 10GB。对任何非重复分区键值,表中项目大小的总和加上该表的本地二级索引中所有项目大小的总和不得超过 10GB。

不带本地二级索引的表不受此项目集合最大 10GB 的限制;此限制仅影响拥有一个或以上本地二级索引的表。

尽管单独项目集合大小受到限制,但是带本地二级索引的整体表存储大小不受限制。如果任一分区键值的总存储大小 (表和索引) 不超过 10GB 阈值,则 Amazon DynamoDB 中的索引表的总大小实际上不受限制。

问:如何跟踪项目集合的大小?

DynamoDB 写入 API(PutItem、UpdateItem、DeleteItem 和 BatchWriteItem)包括一个选项,通过该选项,API 将响应相关项目集合大小的预估值。该预估值包括特定项目集合中数据的预估值大小上限与下限,单位为 GB。

建议对您的应用程序进行检测,从而监测您项目集合的大小。您的应用程序应检测 API 响应相关项目集合大小,并在项目集合超出用户定义限值(例如,8GB)的任何时候记录错误消息。这将提供早期警告系统,通过该警告系统,您可以了解项目集合正在逐渐变大,但会为您留足够的时间去处理。

问:如果超过项目集合的 10GB 大小限制会发生什么情况?

如果特定项目集合超过 10GB 的大小限制,那么您将无法写入新项目或增加该分区键现有项目的大小。仍允许进行会减小项目集合大小的读写操作。表中的其他项目集合不受此影响。

如需解决这一问题,您可以将超出 10GB 的集合中的项目删除或减少其中项目。此外,您可以将新项目引入新分区键值下,从而解决这一问题。如果表中包含不常访问的历史数据,可以考虑将此历史数据归档入 Amazon S3、Amazon Glacier 或另一数据存储空间。

问:如何扫描本地二级索引?

如需扫描本地二级索引,除您想要查询的表名称外,还须明确引用索引。您必须指定索引分区属性名称和值。您可以针对索引键排序属性选择性地指定条件。

您的扫描可检索主索引中存储的非投影属性,其方式为执行表提取操作,且其需要占用附加读取容量单位。

问:本地二级索引扫描是否允许我在要返回的结果集中指定非投影属性?

本地二级索引扫描将支持抓取非投影属性。

问:在本地二级索引扫描中,结果是怎么排列的?

对于本地二级索引,集合内的排序将根据索引属性的排序确定的。


问:什么是 DynamoDB 精细访问控制?

精细访问控制 (FGAC) 使 DynamoDB 表拥有者能对表中的数据进行高度控制。具体而言,表拥有者可以指定(发起人)可以访问表的哪些项目或属性,以及执行什么操作(读/写能力)。FGAC 与 AWS Identity and Access Management (IAM) 配合使用,后者可管理安全证书及相关的权限。

问:DynamoDB FGAC 的常用案例有哪些?

任何跟踪 DynamoDB 表中信息的应用程序都可以受益于 FGAC,在这些应用程序中,最终用户(或充当最终用户的应用程序客户端)需要直接读取或修改表,而不借助中间层服务。例如,开发人员开发了一款名为 Acme 的移动应用,他可以使用 FGAC 来跟踪 DynamoDB 表中每个 Acme 用户的最高分数。FGAC 仅允许应用程序客户端修改当前运行应用程序的用户的最高分数。

问:能否将细粒度访问控制用于 JSON 文档?

能。您可以使用细粒度访问控制 (FGAC) 根据文档中的顶级属性限制对数据的访问。您不能使用 FGAC 限制基于嵌套属性的访问。举例来说,假设您存储的 JSON 文档中包含关于人的下列信息:ID、名、姓氏及他们的所有好友列表。您可以使用 FGAC 限制基于 ID、名或姓氏的访问,但不能限制基于好友列表的访问。

问:不借助 FGAC,开发人员如何实现项目级别的访问控制?

要在不使用 FGAC 的情况下实现这一级别的控制,开发人员必须从几种可能很麻烦的方法中选择。其中的部分方法如下:

  1. 代理:应用程序客户端将请求发送到执行身份验证和授权的中介代理。这种解决方案会增加系统架构的复杂性并导致总拥有成本 (TCO) 更高。
  2. 客户端专用表:为每个应用程序客户端分配由其专用的表。由于各应用程序客户端访问的表都不同,它们可以相互不受干扰。这可能需要开发人员创建数百万个表,从而使数据库管理变得极为困难。
  3. 客户端专用嵌入令牌:在应用程序客户端中嵌入一个秘密令牌。这种方法的弊端是难于更换令牌和处理其对所存储数据的影响。这种情况下,可由此客户端访问的项目的键中会包含秘密令牌。

问:DynamoDB FGAC 如何工作?

使用 FGAC 时,应用程序会请求安全令牌,该令牌授权应用程序只能访问特定 DynamoDB 表中的特定项目。通过此令牌,最终用户应用程序代理可以直接向 DynamoDB 发出请求。收到请求后,传入请求的证书先由 DynamoDB 评估,DynamoDB 将使用 IAM 验证请求的身份并决定允许用户具有的能力。如果用户的请求未获允许,FGAC 将阻止对数据的访问。

问:DynamoDB FGAC 的费用是多少?

使用 FGAC 不收取任何额外费用。如往常一样,您只需为预配置的吞吐量和与 DynamoDB 表相关的存储付费。

问:如何开始使用?

请参考《DynamoDB Developer Guide》的 Fine-Grained Access Control 部分,了解如何创建访问策略、为应用创建 IAM 角色(例如为 Facebook app_id 34567 创建名为 AcmeFacebookUsers 的角色),以及为角色分配访问策略。角色的信任策略决定了接受哪些身份提供商(例如 Login with Amazon、Facebook 或 Google),访问策略描述了可以访问哪些 AWS 资源(例如 DynamoDB 表)。使用角色,您的应用现在即可通过调用 AWS Security Token Service (STS) 的 AssumeRoleWithIdentityRequest API 获得 DynamoDB 的临时证书。

问:如何允许用户查询本地二级索引,但阻止他们使表提取检索未投影的属性?

如果请求未投影到索引中的属性,有些对本地二级索引的查询操作比其他操作的费用更高。可以使用“dynamodb:Attributes”上下文键将权限限制为只允许访问已投影的属性,从而限制这种可能费用高昂的“提取”操作。

问:如何防止用户访问特定的属性?

要防止访问特定的属性,建议的方法是遵循最小权限原则,只允许访问特定的属性。

或者,您可以使用拒绝策略指定不允许访问的属性。但是不建议使用此方法,原因如下:

  1. 使用拒绝策略时,用户可能为发现隐藏的属性名而不断发出对每个可能的属性名的请求,直至用户最终被拒绝访问。
  2. 拒绝策略更容易受到影响,因为 DynamoDB 将来会引入新的 API 功能,这些功能也许会允许您以前想要阻止的访问模式。

问:如何阻止用户向表中添加无效数据?

可用的 FGAC 控件可以决定哪些项目受到更改或读取,以及可以更改或读取哪些属性。用户可以添加不具有被阻止的属性的新项目,也能对可修改的任何属性的任何值进行更改。

问:是否可以授权对多个属性的访问但不将其全部列出?

是的,IAM 策略语言支持多种比较运算,包括 StringLike、StringNotLike 及多种其他运算。有关其他详细信息,请参阅 IAM 策略参考

问:如何创建合适的策略?

建议您使用 DynamoDB 控制台中的 DynamoDB 策略生成器。还可将您的策略与《Amazon DynamoDB Developer Guide》中列出的策略相比较,以确保符合建议的模式。您可以将策略发布到 AWS 论坛,看看 DynamoDB 社区中的其他人有什么想法。

问:我可以根据规范用户 ID 而不是用户登录的身份提供商为用户另外提供的 ID 来授予访问权限吗?

不运行“令牌售卖机”时不可以。如果用户通过 STS 使用 Facebook 证书直接获得对您 IAM 角色的联合访问权限,那这些临时证书只包含了关于该用户在 Facebook 登录的信息,而登录 Amazon 或 Google 的信息不在其中。如果您要将每一个这样的登录信息都映射到自己的稳定标识符并存储在内部,您可以运行一项服务(用户通过此项服务进行登录),然后调用 STS 并向用户提供凭证作为其规范用户 ID,凭证的作用域为您想到的任何分区键值。

问:哪些信息不能对使用 FGAC 的发起人隐藏?

目前,无法阻止发起人获知某些关于表中项目的信息:

  • 项目集指标。发起人可以询问项目集中预计的项目数和以字节表示的大小。
  • 使用的吞吐量。发起人可以询问操作所使用的预配置吞吐量的详细细分或汇总信息。
  • 验证案例。某些情况下,在您未打算向其提供访问权限时,发起人可以了解表的存在情况和主键架构。要防止发生这种情况,请遵循最小权限原则,仅允许访问您打算批准访问的表和操作。
  • 如果您拒绝对特定属性的访问,而不将对特定属性的访问权限列入白名单,执行“允许除例外项外所有”逻辑时,发起人理论上可以确定所隐藏属性的名称。改为将特定属性名称列入白名单会更为安全。

问: Amazon DynamoDB 是否支持 IAM 权限?

是,DynamoDB 通过集成 AWS Identity and Access Management (IAM) 服务来支持 API 级别权限。

有关 IAM 的详细信息,请访问:

问:我希望对我的 DynamoDB 表执行安全分析或操作问题排查。我能否获取在我的账户上发起的所有 DynamoDB API 调用的历史记录?

可以。AWS CloudTrail 是一项 web 服务,为您的帐户记录 AWS API 调用并向您交付日志文件。由 AWS CloudTrail 生成的 AWS API 调用历史记录可用于安全分析、资源变更追踪以及合规性审计。有关针对 CloudTrail 的 DynamoDB 支持的详细信息可以在这里找到。在 AWS CloudTrail 详细信息页面了解更多有关 CloudTrail 的信息,或者通过 CloudTrail 的 AWS 管理控制台首页将它打开。


问:使用 Amazon DynamoDB 如何收费?

每个 DynamoDB 表配置了与其相关联的读取吞吐量和写入吞吐量。如果您超过了免费套餐的范围,将按小时对吞吐容量计费。

请注意,无论您是否向表发送请求,我们都将按小时对吞吐容量收费。如果您想更改表的预置吞吐容量,可使用 AWS 管理控制台或 Auto Scaling 的 UpdateTable API 或 PutScalingPolicy API 执行此操作。

此外,DynamoDB 还将收取索引数据存储的费用,以及标准的 Internet 数据传输费用。

有关 DynamoDB 定价的详细信息,请访问 DynamoDB 定价页面

问:可以提供一些收费示例吗?

在接下来的例子中,我们将使用美国东部(弗吉尼亚北部)区域的收费标准来计算吞吐量费用。要查看其他地区的价格,请访问定价页面

如果您创建了一个表,请求的配置吞吐量为 10 个写入容量单位和 200 个读取容量单位,则您的收费如下:

0.01 USD + (4 x 0.01 USD) = 每小时 0.05 USD

如果您的吞吐量需求发生变化,您将预留吞吐量要求增加至 10000 个写入容量单位和 50000 个读取容量单位,则您的收费将变成:

(1,000 x 0.01 USD) + (1,000 x 0.01 USD) = 每小时 20 USD

有关 DynamoDB 定价的详细信息,请访问 DynamoDB 定价页面

问:你们的价格包括税费吗?

要获得关于税费的详细信息,请参阅 Amazon Web Services 税务帮助

问:什么是配置吞吐量?

在请求量发生变化时,Amazon DynamoDB Auto Scaling 可根据您所需的目标利用率以及最小和最大容量限制自动调整吞吐容量,还可让您手动指定您希望表能够达到的请求吞吐量。该服务会在后台处理资源的配置,以达到请求的吞吐率。您无需考虑实例、硬件、内存以及其他可能影响吞吐率的因素,而只需要配置您希望达到的吞吐量级别。这就是该服务的配置吞吐量模型。

在创建新表或全局二级索引期间,Auto Scaling 会默认为目标利用率、最小和最大容量启用默认设置;或者,您也可以手动指定所需的读取和写入容量需求;此外,Amazon DynamoDB 会自动对资源进行分区并预留适当资源量,以满足您的吞吐量要求。

问:主键的选择会如何影响我所能实现的可扩展性?

存储数据时,Amazon DynamoDB 会将表分为多个分区,并根据主键的分区键元素来分布数据。分配容量资源时,Amazon DynamoDB 在所有主键上采取一种相对随机的访问模式。您应该建立您的数据模型,以使您的请求产生的流量在各个主键之间分布非常均匀。如果表的少数几个分区键元素的访问量非常大,或者有单个分区键元素的使用量非常大,则流量将集中在少数几个分区上,甚至可能只集中在一个分区上。如果工作负载严重不平衡(即不成比例地集中在一个或几个分区上),则操作将无法达到的预置的总体吞吐量级别。为了充分利用 Amazon DynamoDB 吞吐量,应让表中的分区键元素具有大量不同的值,而且对这些值的请求应该非常均匀,越随机越好。例如,如果应用程序有很多客户,并且对各个客户记录所做的请求比较均匀,则 CustomerID 就是适合的主键。而“Product Category Name”就是一个严重不均衡的主键,因为其中的某些产品类别比其余类别更受欢迎。

问:什么是读取/写入容量单位?

如何估计应用程序所需的读取和写入容量单位数量?一个写入容量单位能支持您每秒对最大 1KB 的项目执行一次写入操作。同样,一个读取容量单位让您能够每秒对最大 4KB 的项目执行一次强一致性读取(或执行两次最终一致性读取)。更大的项目将需要更多容量。您可以通过以下方式计算需要的读取和写入容量单位数量,估算每秒需要执行的读取或写入次数,乘以项目的大小(进位到最接近的 KB)。

写入所需要的容量单位 = 每秒的项目写入量 x 1KB 块的项目大小

读取所需要的容量单位* = 每秒的项目读取量 x 4KB 块的项目大小

* 从每秒读取次数角度来看,如果您使用最终一致性读取,您会得到双倍的吞吐量。

如果项目的大小低于 1 KB,则每个读取容量单位将为您提供每秒一次的强一致性读取容量,每个写入容量单位将为您提供每秒一次写入的容量。例如,如果项目大小为 512 字节,您需要每秒从表中读取 100 个项目,则您需要预配置 100 个读取容量单位。

如果项目的大小高于 4 KB,则您应该计算所需的读取容量和写入容量的单位数量。例如,如果项目大小为 4.5KB,您希望每秒进行 100 次强一致性读取,则需要预配置 100(每秒读取次数)x 2(存储 4.5KB 所需的 4KB 块量)= 200 个读取容量单位。

请注意,需要的读取容量单位数量取决于每秒读取的项目数量,而不是 API 调用的数量。例如,如果您需要每秒从表中读取 500 个项目,而且这些项目大小为 4KB 或更小,则需要 500 个读取容量单位。无论您是进行 500 次单独 GetItem 调用,还是进行 50 次 BatchGetItem 调用并每次返回 10 个项目,都不会产生影响。

问:我始终都能达到预置的吞吐量级别吗?

Amazon DynamoDB 在所有主键上采取一种相对随机的访问模式。您应该建立您的数据模型,以使您的请求产生的流量在各个主键之间分布非常均匀。如果访问模式非常不均匀或严重倾斜,则您将无法达到配置吞吐量级别。

存储数据时,Amazon DynamoDB 会将表分为多个分区,并根据主键的分区键元素来分布数据。与表关联的配置吞吐量也在多个分区之间划分,每个分区的吞吐量基于所分配的配额进行单独管理。配置吞吐量不在各个分区之间共享。因此,如果工作负载在分区键值之间分布得非常均匀,Amazon DynamoDB 中的表就能够最好地达到预置的吞吐量级别。在分区键值之间分布请求可将请求分布到各个分区,从而帮助您达到完整的预置吞吐量级别。

如果工作负载模式在主键之间分布不均匀,无法达到您的配置吞吐量级别,则您可以通过进一步提高配置吞吐量级别,为每个分区提供更高吞吐量,以满足吞吐量需求。但是,我们建议您考虑修改请求模式或数据模型,以实现主键之间的相对随机的访问模式。

问:如果我只检索 JSON 文档的某一个元素,是否会被收取整个项目的阅读费用?

会。阅读 DynamoDB 中的数据时,您消耗的是阅读整个项目所需的吞吐量。

问:我可以为单个 DynamoDB 表配置的最大吞吐量是多少?

DynamoDB 的设计旨在实现无限制扩展。但是,如果您希望单个表超过 10000 个写入容量单位或 10000 个读取容量单位的吞吐率,您必须首先填写此在线表格与 Amazon 联系。如果希望从单个订阅者账户预配置超过 20000 个写入容量单位或 20000 个读取容量单位,则您必须首先填写上述表格联系我们

问:我可以为单个 DynamoDB 表配置的最小吞吐量是多少?

您可以为 Auto Scaling 和手动吞吐量预配置请求的最小预置吞吐量为 1 个写入容量单位和 1 个读取容量单位。

这属于免费套餐的范围,后者允许使用 25 个写入容量单位和 25 个读取容量单位。这种免费套餐在账户级别而非表级别上适用。换言之,如果您将所有表的配置容量相加,总容量不超过 25 个写入容量单位和 25 个读取容量单位,则您的配置容量属于免费套餐范围。

问:我通过单次请求来更改配置吞吐量的幅度是否有限制?

您可以使用 UpdateTable API 以任意量提高表的配置吞吐量容量。例如,您可以通过一次 API 调用将表的配置写入容量从 1 个写入容量单位提高到 10000 个写入容量单位。您的账户仍会受限于表级和账户级容量限制,如文档页面所述。如果您需要提高您的配置容量限制,您可以访问我们的支持中心,单击“打开新案例”并提交服务限制提高申请。

问:如何对我的配置吞吐量收费?

每个 Amazon DynamoDB 表已经预配置了达到您请求的吞吐率所需的资源。只要您的表占用这些资源,即按小时费率计费。要获得完整价目表以及相关示例,请参阅 DynamoDB 定价页面

问:如何更改现有 DynamoDB 表的配置吞吐量?

可以通过两种方式更新 Amazon DynamoDB 表的配置吞吐量。您可以在管理控制台中进行更改,也可以使用 UpdateTable API 调用进行更改。无论采用哪种方法,在配置吞吐量级别提高或降低时,Amazon DynamoDB 都将保持可用。

问:我多长时间可以更改一次配置吞吐量?

您可以随时提高预置的吞吐量,但每天执行减少操作的机会最多只有四次。此处的“天”是根据 GMT 时区定义的。此外,如果在过去四个小时内您没有执行减少操作,那么系统将提供一次额外的减少机会,从而将一天内可执行减少操作的最大次数有效提升为 9 次 (一天中的前 4 个小时可减少 4 次,随后 4 个小时每小时减少 1 次)。

请注意,如果 Amazon DynamoDB 表仍在响应您的上一个配置吞吐量更改请求的过程中,则不能再更改配置吞吐量。使用管理控制台或 DescribeTables API 可以查看表的状态。如果状态为“CREATING”、“DELETING”或“UPDATING”,则您将无法调节表的吞吐量。请等待表进入“ACTIVE”状态,然后重试。

问:一致性级别是否影响吞吐率?

是的。对于特定的资源分配,DynamoDB 表可以实现的读取速率在强一致性读取和最终一致性读取之间是不同的。如果您请求“1000 个读取容量单位”,DynamoDB 将分配足够的资源,以便对高达 4KB 的项实现每秒 1000 次强一致读取。如果您需要实现对最大 4KB 项目的每秒 1000 次的最终一致读取,则只需要一半的容量,即 500 个读取容量单位。有关为表选择适当吞吐率的更多指导,请参阅预配置吞吐量指南。

问:项目大小是否会影响吞吐率?

是的。对于特定的资源分配,DynamoDB 表可以达到的读取速率取决于项目的大小。当您指定希望达到的预配置吞吐量时,DynamoDB 会基于项目大小低于 4KB 的假设来预配置其资源。每增加 4KB,达到相同吞吐率所需的资源也会线性增加。例如,如果您为 DynamoDB 表预配置了 100 个读取容量单位,这意味着它每秒可以处理 100 个 4KB 读取操作、50 个 8KB 读取操作,或者 25 个 16KB 读取操作,依此类推。

与之类似,DynamoDB 表所能达到的写入速率取决于项目的体积。当您指定希望达到的预配置写入吞吐量时,DynamoDB 会基于项目大小低于 1KB 的假设来预配置其资源。每增加 1KB,达到相同吞吐率所需的资源也会线性增加。例如,如果您为 DynamoDB 表配置了 100 个写入容量单位,这意味着它每秒可以处理 100 个 1KB 写入操作、50 个 2KB 写入操作,或者 25 个 4KB 写入操作,依此类推。

有关为表选择适当吞吐率的更多指导,请参阅预配置吞吐量指南。

问:如果我的应用程序执行的读取或写入次数大于我的配置容量,会出现什么情况?

如果应用程序的每秒读取次数或每秒写入次数超出了表的配置吞吐量容量允许的范围,则超出配置容量的请求将被阻止,您将收到 400 错误代码。例如,如果您请求了 1000 个写入容量单位,并试图对 1KB 的项目每秒执行 1500 次写入,DynamoDB 将只允许每秒执行 1000 次写入,您的额外请求将收到错误代码 400。您应该使用 CloudWatch 来监控请求速率,以确保始终具有足够的配置吞吐量来达到您需要的请求速率。

问:我怎么知道是否超过了我的预置吞吐容量?

DynamoDB 以 CloudWatch 指标的形式公布您消耗的吞吐量容量。您可在该指标上设置警报,如果接近配置容量,您将会收到通知。

问:更改表的预置吞吐量级别需要多长时间?

一般而言,降低吞吐量需要的时间在几秒至几分钟之间,而提高吞吐量需要的时间通常在几分钟至几小时之间。

我们强烈建议,不要在需要额外吞吐量时才设法增加吞吐量。我们建议您提前配置足够的吞吐量容量,以确保在需要时能够获得容量。

问:什么是预留容量?

预留容量是一种竞价功能,它让您能在调配吞吐量方面享受折扣,但需要付出以下代价:

  • 一次性预付款
  • 承诺协议有效期内的月最低用量。

预留容量在单个 AWS 地区适用,可购买 1 年期或 3 年期预留容量。无论在您创建或更新表时 DynamoDB 表是由 Auto Scaling 托管还是手动预置,每个 DynamoDB 表都有与之关联的预置吞吐容量。此容量决定您的 DynamoDB 表可以达到的读取和写入吞吐率。预留容量是一种账单管理方式,对您的 DynamoDB 性能和容量没有影响。例如,如果您购买 100 个写入单位的预留容量,即表示您同意支付该容量在协议有效期内(1 年或 3 年)的费用,以换取定价折扣。

问:如何购买预留容量?

登录 AWS 管理控制台,转到 DynamoDB 控制台页面,然后单击“Reserved Capacity”。然后会来到“Reserved Capacity Usage”页面。单击“Purchase Reserved Capacity”,这时会显示一张表格,填写后就可以购买预留容量了。请确保您已选择要在其中使用预留容量的 AWS 区域。完成预留容量的购买后,您将在“Reserved Capacity Usage”页面中看到您购买的项目。

问:能否取消购买预留容量?

不可以,您无法取消预留容量,而且一次性付款也不退款。无论您使用多少容量,在预留容量有效期内都必须继续支付小时费用。

问:购买预留容量的最低限额是多少?

最小的预留容量产品是 100 个容量单位(读取或写入)。

问:是否存在用于购买预留容量的 API?

目前没有。今后,我们将提供 API 和更多预留容量选项。

问:是否可以将预留容量从一个地区转移到另一个?

不可以。预留容量是与一个地区关联的。

问:是否可以调配比预留容量更高的吞吐量?

是的。当那您购买预留容量时,即表示您同意最低使用等级,并以折扣后的费率支付该使用等级的费用。如果您调配的容量比该最低等级多,则将按标准费率支付超出部分的费用。

问:如何使用我的预留容量?

预留容量会自动应用到您的账单。例如,如果您购买了 100 个写入容量单位的预留容量,并且调配了 300 个,那么,您的预留容量购买将自动包含 100 个写入单位,而您将按标准费率支付剩下的 200 个写入容量单位的费用。

问:如果我调配的吞吐量少于预留容量,会出现什么情况?

预留容量购买是同意在协议有效期内购买最低调配吞吐量的协议,以获得折扣定价。如果您使用量少于预留容量,将仍需支付该最低调配吞吐量的费用。

问:是否可以将我的预留容量用于多个 DynamoDB 表?

是的。预留容量适用于您购买预留容量的地区内的总调配容量。例如,如果您购买了 5 000 个写入单位的预留容量,则可以将其应用到单个写入容量为 5 000 个单位的表,或者 100 个写入容量为 50 个单位的表,或者 1 000 个写入容量为 5 个单位的表,等等。

问:DynamoDB 是否会将预留容量应用到整合账单账户?

是的。如果您具有多个与整合账单关联的账户,则您在付款人账户级别或关联账户级别购买的一定单位数量的预留容量将由与付款人账户相关联的所有账户共享。预留容量首先应用到购买它的账户,然后,剩余的未使用容量将应用到其他关联账户。

 

问:DynamoDB 跨区域复制是什么?

答:借助 DynamoDB 跨区域复制,您可以在一个或多个 AWS 区域中维护 DynamoDB 表格(称为“主表格”)的完全相同副本(称为“副本”)。为表格启用跨区域复制后,您可以在其他 AWS 区域中创建表格的完全相同副本。在表格中写入的内容会自动传播到所有副本。

 

问:何时应使用跨区域复制?

答:在下列情况下,您可以使用跨区域复制。

  • 提高灾难恢复的效率:通过将表格复制到多个数据中心,您可以在一个数据中心出现故障时,切换为使用另一个区域的 DynamoDB 表格。
  • 加快读取速度:如果您的客户位于多个区域,则可以通过读取最近 AWS 数据中心内的 DynamoDB 表格,更快速地提供数据。
  • 简化流量管理:您可以使用副本跨表格分配读取工作负载,从而降低主表格占用的读取容量。
  • 便于区域迁移:通过在新区域中创建只读副本,然后将此副本晋升为主表格,您可以更轻松地将您的应用程序迁移到相应区域中。
  • 实时数据迁移:要将 DynamoDB 表格从一个区域移至另一个区域,您可以在目标区域中创建源区域中的表格的副本。当表格同步后,您可以将您的应用程序切换为写入目标区域。

问:支持什么跨区域复制模式?

答:目前,跨区域复制支持单主模式。单主模式是指有一个主表格以及一个或多个副本表格。

问:如何为表格设置单主模式的跨区域复制?

您可以使用 DynamoDB 跨区域复制库创建跨区域副本。

问:我怎样才能知道引导启动 bootstrapping 何时完成?

答:在复制管理应用程序上,复制状态会从“引导启动 bootstrapping”变为“活动”。

问:对于单主表格,我能否拥有多个副本?

答:能。单主表格的副本表格数量没有限制。系统会为每个副本表格创建一个 DynamoDB 流读取程序,这些读取程序会复制主表格中的数据,从而确保副本保持同步。

问:为表格设置跨区域复制需要支付多少费用?

DynamoDB 跨区域复制使用 DynamoDB 跨区域复制库启用。尽管跨区域复制库没有额外费用,但您需要为该流程使用的下列资源支付常规价格。您需要为以下方面支付费用:

  • 预置吞吐量 (写入和读取) 以及副本表格的存储空间。
  • 跨地区传输数据。
  • 读取 DynamoDB Streams 中的数据,以确保各表保持同步。
  • 预配置为托管复制流程的 EC2 实例。实例的费用取决于您所选择的实例类型以及实例的托管区域。

问:托管跨区域复制的 Amazon EC2 实例在哪个区域运行?

答:托管跨区域复制应用程序的 Amazon EC2 实例位于跨区域复制应用程序最初启动所在的区域。您需要按照此区域的实例价格支付费用。

问:Amazon EC2 实例是否随主表格和副本表格的大小和吞吐量变化而自动扩展?

答:我们暂无法自动扩展 EC2 实例。您需要在配置 DynamoDB 跨区域复制时选择实例大小。

问:如果管理复制的 Amazon EC2 实例发生故障,会出现什么情况?

答:Amazon EC2 实例是在 Auto Scaling 组的后面运行。也就是说,应用程序会将故障自动转移到其他实例。底层应用程序使用 Kinesis 客户端库 (KCL),可以对副本执行检查点操作。如果实例发生故障,则应用程序会了解要去查找检查点,并从检查点恢复。

问:创建只读副本期间,能否继续使用我的 DynamoDB 表格?

答:能。创建副本是一项在线操作。创建只读副本期间,您的表格仍可以执行读取和写入操作。引导启动 bootstrapping 使用扫描操作复制源表格中的内容。我们建议为表格预配置足够的读取容量单位,以支持扫描操作。

 

问:创建一个副本需要多长时间?

答:最初从主表格到副本表格的复制时间取决于主表格的大小、主表格和副本表格的预置容量。将主表格上的项目级变化传播到副本表格的时间取决于主表格和副本表格上的预置容量,以及运行复制应用程序的 Amazon EC2 实例的大小。

问:如果我更改了主表格上的预置容量,那么副本表格上的预置容量也会随之更新吗?

答:在您创建复制后,主表格上的任何预置容量变化都不会更新副本表格的吞吐容量。

 

问:副本表格的索引是否与主表格相同?

答:如果您选择通过复制应用程序创建副本表格,则主表格上的二级索引不会自动创建在副本表格上。复制应用程序不会将主表格的二级索引变化传播到副本表格中。您必须通过 AWS 管理控制台添加/更新/删除各个副本表格上的索引,就像处理常规 DynamoDB 表格一样。

 

问:副本的预置的吞吐容量是否与主表格相同?

答:我们建议您在创建副本表格时,至少预配置与主表格相同的写入容量,以确保副本表格有足够的容量来处理传入的所有写入操作。您可以在适合您应用程序的任意级别,设置副本表格的预置的读取容量。

 

问:副本表格的一致性模型是什么?

答:副本为异步更新。DynamoDB 会将主表格接受的写入操作确认为成功的写入操作。然后,写入操作会传播到各个副本。也就是说,写入操作传播到所有副本表格中之前会略有延迟。

问:跨区域复制是否有 CloudWatch 指标?

答:CloudWatch 指标适用于所有复制配置。您可以选择复制组,然后转到“监控”选项卡查看指标。您可以查看吞吐量和已处理的记录数的相关指标,并能监控主表格和副本表格之间的任何吞吐量差异。

问:我能否在主表格所在区域拥有副本表格?

答:能。只要副本表格与主表格不同名,就可以位于同一区域中。

问:我能否在创建复制组后添加或删除副本?

答:能。您可以随时向复制组添加副本或从中删除副本。

问:我能否在创建副本组之后将其删除?

答:能。删除复制组也会删除此组的 EC2 实例。不过,您必须删除 DynamoDB 元数据表格。

问:DynamoDB 触发器是什么?

答:借助 DynamoDB 触发器这项功能,您可以根据 DynamoDB 表格上的项目级更新执行自定义操作。您可以在代码中指定自定义操作。

问:DynamoDB 触发器有何用途?

答:DynamoDB 触发器非常适用于多个应用场景。一些使用案例包括发送通知、更新聚合表格以及将 DynamoDB 表格连接到其他数据源。

问:DynamoDB 触发器的工作原理是什么?

答:DynamoDB 触发器的自定义逻辑以代码形式存储在 AWS Lambda 函数中。要为给定表格创建触发器,您可以关联 AWS Lambda 函数和 DynamoDB 表格上的流(通过 DynamoDB 流)。当表格更新时,更新便会发布到 DynamoDB 流中。相应地,AWS Lambda 会从关联的流中读取更新,并执行函数中的代码。

问:使用 DynamoDB 触发器需要支付多少费用?

答:使用 DynamoDB 触发器,您只需按 AWS Lambda 函数的请求数和执行时间支付费用。请单击此处,详细了解 AWS Lambda 定价。您无需为 AWS Lambda 函数对与表格相关联的流(通过 DynamoDB 流)执行的读取操作支付费用。

问:表格触发器的数量是否有限制?

答:表格触发器的数量没有限制。

问:DynamoDB 触发器支持什么语言?

目前,DynamoDB 触发器支持用 JavaScript、Java 和 Python 编写触发器函数。

问:创建、编辑或删除 DynamoDB 触发器能否获得 API 支持?

答:不能。暂无用于创建、编辑或删除 DynamoDB 触发器的原生 API。您必须使用 AWS Lambda 控制台创建 AWS Lambda 函数,并将其与 DynamoDB 流中的某个流关联。有关详细信息,请参阅 AWS Lambda 常见问题页面

问:如何创建 DynamoDB 触发器?

答:创建触发器的具体方法是,创建一个 AWS Lambda 函数,然后将此函数的事件源与 DynamoDB 流中的某个流相关联。有关详细信息,请参阅 AWS Lambda 常见问题页面。

问:如何删除 DynamoDB 触发器?

答:您可以通过删除关联的 AWS Lambda 函数来删除触发器。可以通过 AWS Lambda 控制台或 AWS Lambda API 调用删除 AWS Lambda 函数。有关详细信息,请参阅 AWS Lambda 常见问题页面文档页面

问:我现有一个 AWS Lambda 函数,如何创建使用此函数的 DynamoDB 触发器?

答:您可以将 AWS Lambda 函数的事件源更改为指向 DynamoDB 流中的某个流。为此,您可以使用 DynamoDB 控制台。在启用流的表格中,依次选择相应的流和“关联 Lambda 函数”按钮,然后在 Lambda 函数列表中选择要用于 DynamoDB 触发器的函数。

问:DynamoDB 触发器的可用区域是什么?

答:DynamoDB 触发器在 AWS Lambda 和 DynamoDB 的所有可用 AWS 区域可用。

问:DynamoDB 流是什么?

答:DynamoDB 流中按时间顺序排列出过去 24 小时内表格中的项目级数据变化。您可以使用简单的 API 调用访问流,并能使用流不断更新其他数据存储,确保其与 DynamoDB 最新变化保持同步,也可以使用流根据您表格的变化采取措施。

问:DynamoDB 流有何优势?

使用 DynamoDB 流 API,开发人员可以使用更新并接收项目变化前后的项目级数据。您还可以用它为在 DynamoDB 上构建的应用程序构建创新型扩展。例如,使用 DynamoDB 构建全球多人游戏时,开发人员可使用 DynamoDB 流 API 构建多主机拓扑结构,并通过使用各主机的 DynamoDB 流和重放远程主机中的更新来确保各主机保持同步。再例如,开发人员可使用 DynamoDB 流 API 构建移动应用程序,从而在用户上传新自拍时,尽快自动发送通知到朋友圈中所有好友的移动设备上。开发人员还可以使用 DynamoDB 流,确保 Amazon Redshift 等数据仓库工具与 DynamoDB 表的所有变化保持同步,从而启用实时分析。DynamoDB 还与使用 Amazon DynamoDB Logstash 插件的 Elasticsearch 集成,以便开发人员能够添加 DynamoDB 内容的自由文本搜索功能。

要详细了解 DynamoDB 流,请阅读我们的文档

问:我的 DynamoDB 表的更改可通过 DynamoDB Streams 提供多久?

DynamoDB Streams 会将表的所有更改记录 24 小时。在此之后,它们将被擦除。

问:如何启用 DynamoDB Streams?

答:必须逐个表格启用 DynamoDB 流。要为现有的 DynamoDB 表启用 DynamoDB 流,请通过 AWS 管理控制台选择相应表格,选择“Overview”选项卡,单击“Manage Stream”按钮,选择某个视图类型,然后单击“Enable”。

有关详细信息,请参阅我们的文档

问:如何确认 DynamoDB 流是否已启用?

答:启用 DynamoDB 流后,您可以在 AWS 管理控制台中看到相应的流。依次选择您的表格和“Overview”选项卡。在“Stream”详情下,确认“Stream”启用已设置为“Yes”。

问:我如何才能访问 DynamoDB 流?

答:您可以使用 DynamoDB SDK 或 Kinesis 客户端库 (KCL) 通过简单的 API 调用访问 DynamoDB 流中的流。KCL 可帮助您使用和处理流中的数据,还能帮助您管理各种任务,如在多个读取程序之间进行负载均衡、响应实例故障,以及对已处理的记录执行检查点操作。

要详细了解如何访问 DynamoDB 流,请参阅我们的文档

问:DynamoDB Streams 是否按顺序显示我的 DynamoDB 表的所有更新?

任何单个项目的更改将以正确的顺序显示。不同项目的变化在 DynamoDB 流中的显示顺序可能不同于它们的接收顺序。

例如,假设您有一个跟踪游戏最高得分的 DynamoDB 表格,且此表格中的每个项目均代表一个玩家。如果您按如下顺序进行了以下三项更新:

  • 更新 1:将玩家 1 的最高分改为 100 分
  • 更新 2:将玩家 2 的最高分改为 50 分
  • 更新 3:将玩家 1 的最高分改为 125 分

更新 1 和更新 3 更改的是同一个项目(玩家 1),因此 DynamoDB 流会在更新 1 之后显示更新 3。这样,您就可以检索每个玩家最新的最高得分。流可能不会以同样的顺序(即,更新 2 在更新 1 和更新 3 之间进行)显示所有这三项更新,但每位玩家记录的更新会以正确的顺序显示。

问:我是否需要管理 DynamoDB 流中某个流的容量?

答:不需要。DynamoDB 流会自动管理流的容量。如果您大幅增加 DynamoDB 表格的流量,则 DynamoDB 会自动调节流的容量,使其能够继续接受所有更新。

问:我能以何种速率读取 DynamoDB 流中的内容?

答:您最高能以 DynamoDB 表格的预置写入容量的两倍速率从您在 DynamoDB 流中的流读取更新。例如,如果您预配置了足够的容量,以便在您的 DynamoDB 表格中每秒更新 1000 个项目,则您每秒最多可以从流中读取 2000 个更新。

问:如果我删除了 DynamoDB 表格,DynamoDB 流中的流是否也会随之删除?

答:不,不会立即删除。DynamoDB 流中的流会存续 24 个小时,以便您可以读取表格的最后更新。24 小时后,流便会自动从 DynamoDB 流中删除。

问:如果我为表格关闭 DynamoDB 流,会出现什么情况?

答:如果您关闭 DynamoDB 流,则流会存续 24 小时,但不会更新您的 DynamoDB 表格的其他任何变化。

问:如果我关闭了 DynamoDB Streams 后再将它重新打开,将发生什么?

如果您关闭 DynamoDB Streams,数据流将存续 24 小时,但不会更新您的 DynamoDB 表的任何其他更改。如果您重新打开 DynamoDB 流,则会在 DynamoDB 流中新建一个流,其中包含您的 DynamoDB 表格从新流创建之时起的变化。

问:DynamoDB 流中是否有重复或缺漏?

答:否。DynamoDB 流旨在将您表格的所有更新一次性准确地反映在流中。

问:DynamoDB 流中包含什么信息?

答:DynamoDB 流中包含项目变化前后的值信息。流还包含变化类型(INSERT、REMOVE 和 MODIFY)以及发生变化的项目的主密钥。

问:如何选择在 DynamoDB 流中添加的信息?

答:对于新表格,请使用 CreateTable API 调用,并指定 ViewType 参数来选择要在流中添加的信息。
对于现有表格,请使用 UpdateTable API 调用,并指定 ViewType 参数来选择要在流中添加的信息。

ViewType 参数会使用以下值:

ViewType: {
                    { KEYS_ONLY,
                      NEW_IMAGE,
                      OLD_IMAGE,
                      NEW_AND_OLD_IMAGES}
                }

这些值的含义如下:KEYS_ONLY:只在流中添加已更改项目的密钥名称。

  • NEW_IMAGE:在流中添加更新后的项目(新项目)的密钥名称和项目名称。
  • OLD_IMAGE:在流中添加更新前的项目(旧项目)的密钥名称和项目名称。
  • NEW_AND_OLD_IMAGES:在流中添加更新前的项目(旧项目)和更新后的项目(新项目)的密钥名称和项目名称。

问:我能否使用 Kinesis 客户端库访问 DynamoDB 流?

答:能。熟悉 Kinesis API 的开发人员能够轻松使用 DynamoDB 流。您可以使用执行 Amazon Kinesis 界面的 DynamoDB Streams 适配器,从而使您的应用程序能够使用 Amazon Kinesis 客户端库 (KCL) 访问 DynamoDB Streams。有关使用 KCL 访问 DynamoDB Streams 的更多信息,请参阅我们的文档

问:我能否更改 DynamoDB 流所含信息的类型?

答:如果您想在创建流后更改其中存储的信息的类型,则必须禁用此流,然后使用 UpdateTable API 新建一个流。

问:在我更改 DynamoDB 表格后,此更改最快要多久才能反映在 DynamoDB 流中?

答:一般来说,更改不到 1 秒即可反映在 DynamoDB 流中。

问:如果我删除了一个项目,此更改是否会反映在 DynamoDB 流中?

答:是的。DynamoDB 流中的每个更新都包含一个参数,用于指定更新是删除项目、插入新项目还是修改现有项目。要详细了解更新类型,请参阅我们的文档

问:在为表格启用 DynamoDB 流后,我何时才能开始读取流中的内容?

答:您可以使用 DescribeStream API 获取流的当前状态。当状态变为“已启用”后,表格的所有更新都会反映在流中。

您可以一开始创建流就开始读取其中内容,但在状态变为“已启用”之前,流可能不会包含表格的所有更新。

问:Elasticsearch 的 Amazon DynamoDB Logstash 插件是什么?

Elasticsearch 是一种常用的开源搜索和分析引擎,用于简化实时搜索和大数据分析。Logstash 是一种开源数据管道,可与 Elasticsearch 一起运行,帮助您处理日志和其他事件数据。借助 Amazon DynamoDB Logstash 插件,您可以非常轻松地将 DynamoDB 表与 Elasticsearch 集集群成。

问:Amazon DynamoDB Logstash 插件的费用情况如何?

您可以免费下载和使用 Amazon DynamoDB Logstash 插件。

问:如何下载和安装 Amazon DynamoDB Logstash 插件?

您可以从 GitHub 上下载 Amazon DynamoDB Logstash 插件。请阅读我们的文档页面,详细了解如何安装和运行此插件。


问:什么是 DynamoDB Storage Backend for Titan?

DynamoDB Storage Backend for Titan 是一款插件,让您可以将 DynamoDB 用作 Titan 图形数据库的基础存储层。这是一种用于实施无索引邻接的客户端解决方案,便于您对 DynamoDB 数据库进行快速图形遍历。

问:什么是图形数据库?

图形数据库就是用于存储顶点以及连接这些顶点的指向边缘的存储区。这些顶点和边缘都具有可存储为键值对的属性。

图形数据库使用邻接列表来存储边缘,因此能够实现简单遍历。图形数据库中的图形可依据具体的边缘类型进行遍历,或者也可对整个图形进行遍历。图形数据库可以通过使用操作、所有权和父项关系等来表示实体之间的关联关系。

问:哪些应用程序适合使用图形数据库?

如果实体间的连接或关系是您正在尝试建模的数据核心,那就适合使用图形数据库。因此,图形数据库对于建模和查询社交网络、业务关系、依赖关系和货物移动等非常有用。

问:如何才能开始使用 DynamoDB Storage Backend for Titan?

最简单的使用方法为,使用本文档页面中提及的 CloudFormation 模板,将运行 Gremlin 服务器的 EC2 实例与 DynamoDB Storage Backend for Titan 一同启动。您还可以按照此处的文档说明,在自己的计算机上按照《Marvel and Graph-Of-The-Gods》教程克隆 GitHub 资源库中的项目并予以启动。当您准备扩展测试或在生产环境下运行时,您可以将后端切换为使用 DynamoDB 服务。请查看 AWS 文档了解更多详情。

问:DynamoDB 存储后端与其他 Titan 存储后端有何不同之处?

DynamoDB 是一项托管服务,因此您可以使用它作为 Titan 存储后端来运行图形工作负载,而无需管理自己的图形存储集群。

问:DynamoDB Storage Backend for Titan 是不是一项完全托管的服务?

不是。DynamoDB Storage Backend for Titan 负责管理 Titan 工作负载的存储层。但是,此插件不会对客户端进行预配置和管理。为了简单地预配置 Titan,我们开发了 CloudFormation 模板,该模板使用 Gremlin 服务器来设置 DynamoDB Storage Backend for Titan。请参阅此处提供的说明。

问:使用 DynamoDB Storage Backend for Titan 的费用是多少?

我们将向您收取正常的 DynamoDB 吞吐量和存储费用。使用 DynamoDB 作为 Titan 图形工作负载的存储后端无需支付额外的费用。

问:DynamoDB 后端是否会与其他后端上的 Titan 功能集完全兼容?

有关不同 Titan 存储后端的功能集的比较表,请参阅此处的文档

问:此插件将支持哪些版本的 Titan?

我们已推出了 0.5.4 和 1.0.0 版的 DynamoDB Storage Backends for Titan 插件。

问:我目前将 Titan 和其他后端一起使用。我是否可以迁移至 DynamoDB?

绝对可以。DynamoDB Storage Backends for Titan 采用的是 Titan KCV 存储界面,因此您可以从其他存储后端切换至 DynamoDB,且只需对应用程序进行少量更改。有关适用于 Titan 的存储后端的完整比较,请参阅我们的文档

问:我目前将 Titan 和其他后端一起使用。我该如何迁移至 DynamoDB?

您可以使用批量加载将图形从一个存储后端复制至 DynamoDB Storage Backend for Titan。

问:我如何通过插件将 Titan 实例连接至 DynamoDB?

如果您使用已安装的 DynamoDB Storage Backend for Titan 创建图形和 Gremlin 服务器实例,则只需向默认 AWS 证书提供程序链提供委托人/证书集即可连接至 DynamoDB。这可以通过主文件夹中的 EC2 实例配置文件、环境变量或证书文件来完成。最后,您需要选择要连接的 DynamoDB 终端节点。

问:使用 DynamoDB Storage Backend for Titan 时,数据的耐用性如何?

使用 DynamoDB Storage Backend for Titan 时,数据将受到 DynamoDB 的强有力保护,这是因为 DynamoDB 基于 Amazon 稳定可靠且高度可用的数据中心运行。该服务在 AWS 区域的三个设施上复制数据,以便在发生服务器故障或可用区域运行中断时能够提供容错保护。

问:DynamoDB Storage Backend for Titan 的安全性如何?

DynamoDB Storage Backend for Titan 将图形数据存储在多个 DynamoDB 表中,因此享有和所有 DynamoDB 工作负载一样高的安全性。精细访问控制、IAM 角色和 AWS 委托人/证书集会控制对 DynamoD 表及表中项目的访问。

问:DynamoDB Storage Backend for Titan 如何扩展?

DynamoDB Storage Backend for Titan 的扩展方式与任何其他 DynamoDB 工作负载的扩展方式一样。您随时都可以选择提高或降低所需的吞吐量。

问:我的图形可以包含多少个顶点和边缘?

当您使用多项目模型进行边缘存储时,您将受到 Titan 限值 (2^60) 的限制,这一数字代表了图形的最大边缘数及其一半的顶点数。如果您使用的是单项目模型,则可以在特定外顶点键值中存储的边缘数量将受到 DynamoDB 最大项目大小(当前为 400kb)的限制。

问:我的顶点和边缘属性可以为多大?

多项目模型中的所有边缘属性总和不得超过最大项目大小 (400kb)。在多项目模型中,每个顶点属性最高可达 400kb。在单项目模型中,总项目大小(包括顶点属性、边缘属性和边缘)不得超过 400kb。

问:具有多少种数据模型?它们有哪些不同之处?

DynamoDB Storage Backend for Titan 有两种不同的存储模型:单项目模型和多项目模型。在单项目存储模型中,顶点、顶点属性和边缘存储在一个项目中。在多项目数据模型中,顶点、顶点属性和边缘则存储在不同项目中。上述两种情况下,边缘属性将存储在边缘所对应的相同项目中。

问:我应使用哪种数据模型?

通常,我们建议您针对边缘存储和图形索引表使用多项目数据模型。否则,您就需要限制可以针对一个外顶点的边缘/顶点属性的数量,或者限制可以在图形索引的特殊属性名称值对中进行索引的实体数量。通常情况下,您可以在 Titan 版本 0.5.4 和 1.0.0 中针对其他 4 KCV 存储使用单项目数据模型,因为它们所存储的项目大小通常小于 400KB。有关 Tian 插件在 DynamoDB 中创建的表的完整列表,请参阅此处

问:我是否必须为 Titan 图形数据库创建架构?

Titan 支持自动式创建,以便新的边缘/顶点属性和标签能在首次使用时随即注册(请参阅此处提供的详细信息)。默认情况下,将使用 Gremlin 结构(边缘标签 = MULTI,顶点属性 = SINGLE)。

问:我是否可以更改 Titan 图形数据库的架构?

可以。但是,您无法更改现有顶点/边缘属性和标签的架构。有关详细信息,请参阅此处

问:DynamoDB Storage Backend for Titan 如何处理超级节点?

DynamoDB 通过对顶点标签进行分区来处理超级节点。如果您在创建管理系统时将顶点标签定义为分区,则可以在边缘存储表中根据分区-排序键值空间的不同分区键值输入边缘和超出顶点的顶点属性的不同子集。当您的边缘存储拥有多个物理分区时,这通常会导致虚拟顶点标签分区将存储在不同物理 DynamoDB 分区中。要估算为边缘存储表提供支持的物理分区的数量,请参阅文档中的指南。

问:DynamoDB Storage Backend for Titan 是否支持批量图形操作?

支持。DynamoDB Storage Backend for Titan 将通过蓝图批量图形实施和 Titan 的批量加载配置选项,为批量图形操作提供支持。

问:DynamoDB Storage Backend for Titan 是否支持事务?

DynamoDB Storage Backend for Titan 支持乐观锁定。这意味着,DynamoDB Storage Backend for Titan 可以根据所述“键列”对或“键值”的现有值,有条件地写入单个“键列”对(位于多项目模型中)或单个键值(位于单项目模型中)。

问:我是否可以在一个区域中存储 Titan 实例,然后在另一区域中访问 DynamoDB?

您可以在 EC2 Titan 实例以外的其他区域访问 DynamoDB 终端节点,但不推荐这样做。在 EC2 范围外运行 Gremlin 服务器时,我们建议连接至 EC2 实例区域的 DynamoDB 终端节点,以便降低跨区域请求的延迟影响。我们还建议在 VPC 下运行 EC2 实例以提高网络性能。CloudFormation 模板将为您执行这一整串配置。

问:我是否可以将此插件与其他 DynamoDB 功能(如更新流和跨区域复制)结合使用?

您可以将跨区域复制和 DynamoDB 流功能结合使用,以便在其他区域中创建图形表的只读副本。


问:Amazon DynamoDB 是否会报告 CloudWatch 指标?

会,Amazon DynamoDB 将报告数个表格级别的 CloudWatch 指标。您可以根据这些指标,制定有关 Amazon DynamoDB 表格的操作决策并采取特定措施(如设置警报)。有关报告指标的完整列表,请参阅文档的使用 CloudWatch 监控 DynamoDB 部分。

问:我如何从 Amazon DynamoDB 表格中查看 CloudWatch 指标?

在 Amazon DynamoDB 控制台上,选择想要在其中查看 CloudWatch 指标的表格,然后选择“指标”选项卡。

问:多久报告一次指标?

大多数用于 Amazon DynamoDB 的 CloudWatch 指标将每隔 1 分钟报告一次,其他指标将每隔 5 分钟报告一次。有关更多详细信息,请参阅文档的使用 CloudWatch 监控 DynamoDB 部分。


问:什么是标签?

标签是您为 AWS 资源分配的标记。每个标签都由您可以定义的键和值组成。AWS 使用标签作为一种机制,据此整理成本分配报告中的资源成本。有关标记的更多信息,请参阅 AWS 账单和成本管理用户指南

问:可标记哪些 DynamoDB 资源?

您可以标记 DynamoDB 表。与已标记的表关联的本地二级索引和全局二级索引会自动标有相同的标签。本地二级索引和全局二级索引的成本将显示在用于相应 DynamoDB 表的标签下。

问:为什么应该使用 Tagging for DynamoDB?

您可以将 Tagging for DynamoDB 用于成本分配。通过将标签用于成本分配,您可以标记 DynamoDB 资源以根据项目或其他条件轻松跟踪相应成本,从而反映您自己的成本结构。

问:如何将标签用于成本分配?

您可以使用成本分配标签对 AWS 成本进行分类和跟踪。AWS 成本管理器和详细账单报告支持按标签细分 AWS 成本。通常情况下,客户会使用业务标签 (例如成本中心/业务部门、客户或项目) 来将 AWS 成本与传统成本分配维度关联起来。不过,成本分配报告中可以包含任何标签。这使您可以轻松将成本与技术或安全维度 (例如特定应用程序、环境或合规性项目) 关联起来。

问:如何查看分配给 AWS 标记资源的成本?

您可以通过成本管理器或成本分配报告查看分配给 AWS 标记资源的成本。

成本管理器是一款免费的 AWS 工具,您可以用其查看过去长达 13 个月的成本,并预测未来 3 个月可能需要花费的成本。您可以按“标签”进行筛选并选择标签键和值 (如果没有指定标签值,则选择“无标签”) 来查看特定标签的成本。

成本分配报告包括您每个账单周期的所有 AWS 成本。该报表包括标记和未标记资源,因此您可以清晰地排列资源费用。例如,如果您用某个应用程序名称作为多个资源的标签,则可以跟踪在这些资源上运行的单个应用程序的总成本。有关成本分配的更多信息,请参阅 AWS 账单和成本管理用户指南

问:是否可以标记 DynamoDB Streams 使用量?

不可以。目前无法标记 DynamoDB Streams 使用量。

问:预留容量使用量是否会显示在我的账单中的表标签下?

会。每个表的 DynamoDB 预留容量费用将显示在相关标签下。请注意,预留容量基于先到先得的原则跨所有关联 AWS 账户应用于 DynamoDB 使用量。这意味着,即使您每月各个表和索引的 DynamoDB 使用量相似,每个标签的成本分配报告仍然可能存在差异,这是因为预留容量将基于 DynamoDB 资源的计量顺序进行分发。

问:数据使用费用是否会显示在我的账单中的表标签下?

不会。DynamoDB 数据使用费用没有标签。这是因为数据使用量是在账户级别而不是表级别计费的。

问:标签是否需要值属性?

不需要。标签值可以为空。

问:标签区分大小写吗?

区分。标签键和值要区分大小写。

问:可为一个 DynamoDB 表添加多少标签?

您最多可为一个 DynamoDB 表添加 50 个标签。前缀为“aws:”的标签不可以手动创建,且不会计入每项资源的标签数量限制。

问:是否可以将标签以回溯方式应用于 DynamoDB 表?

不可以。标签自应用之日开始整理和跟踪数据。如果您在 1 月 1 日创建了一个表,直到 2 月 1 日才为它指定一个标签,那么此表在 1 月的所有使用情况将保留为未标记状态。

问:如果在当月结束之前将某个标签从 DynamoDB 表中移除,该标签是否仍会在我的账单中显示?

如果您针对在特定时间段内跟踪到的开支情况创建了报告,则您的成本报告将显示在该时间段内标记的资源的成本。

问:删除 DynamoDB 表后,现有标签会出现什么情况?

删除 DynamoDB 表后,其标签将自动移除。

问:如果添加的标签的键与某个现有标签的键相同,会出现什么情况?

每个 DynamoDB 表最多只能有一个键与其他标签的键相同的标签。如果您添加的标签的键与现有标签的键相同,则现有标签的值将更新。


问:什么是 DynamoDB Time-to-Live (TTL)?

DynamoDB Time-to-Live (TTL) 是一种机制,让您可以设置特定的时间戳,以便从表中删除过期项目。如果时间戳过期,那么相应项目将被标记为“已过期”,并在随后从表中删除。通过使用此功能,您无需再跟踪过期数据并手动将其删除。TTL 可以帮助您减少存储使用量,并降低不再关联的数据的存储成本。

问:为何需要使用 TTL?

TTL 主要用于两个场景:

  • 删除不再关联的旧数据,例如事件日志、使用历史记录、会话数据等。尽管存储在系统中的旧数据可能不再关联,但堆积起来仍会随着时间的推移而变得过于庞大。在这种情况下,您最好从系统中清除这些陈旧的记录,以便节省用于存储这些记录的成本。
  • 有时,为了遵守您的数据保留和管理策略,您可能希望将数据在 DynamoDB 中保留指定的一段时间。在义务期限届满后,您可能想要最终删除这些数据。但请您了解,TTL 会尽力确保有额外的吞吐量供其他关键操作使用。DynamoDB 的目标是在两天内删除过期项目,但实际花费的时间可能更长,具体取决于数据的大小。

问:DynamoDB TTL 的工作原理是什么?

要为表启用 TTL,请首先确保此表具有可以存储表中每个项目的到期时间戳的属性。时间戳必须采用纪元时间格式,这有助于避免客户端和服务器之间的时区差异。

DynamoDB 运行着一个用于监控所有项目的后台扫描器。如果时间戳已过期,则该进程会将相应项目标记为“已过期”,并将其存入队列以待后续删除。

注意:TTL 需要使用纪元格式时间戳填充的数字 DynamoDB 表属性来指定数据的过期条件。为 TTL 属性设置值时应小心,因为错误的值可能会导致提前删除项目。

问:如何指定 TTL?

要指定 TTL,请首先在表上启用 TTL 设置,并指定要用作 TTL 值的属性。在向表中添加项目时,如果您希望 DynamoDB 在项目到期后自动将其删除,可以指定 TTL 属性。这个值就是到期时间,采用纪元时间格式表示。DynamoDB 会负责其余的工作。TTL 可通过控制台中表的概览选项卡进行指定。或者,开发人员也可以调用 TTL API 在表上配置 TTL。请参阅我们的文档API 指南

问:可以在现有表上设置 TTL 吗?

可以。如果已经创建了一个表,且该表具有可用作其项目的 TTL 的属性,则您只需为该表启用 TTL 并为 TTL 指定适当的属性即可。如果该表没有可用于 TTL 的属性,则您必须创建这样一个属性并使用 TTL 的值更新项目。

问:可以通过为整个表设置 TTL 来删除整个表吗?

不可以。虽然您需要在表级别定义可用于 TTL 的属性,但只能按项目粒度删除数据。也就是说,表中需要在过期后删除的每个项目都需要针对 TTL 属性定义一个值。无法选择自动删除整个表。

问:可以只为表中的部分项目设置 TTL 吗?

可以。TTL 仅对在 TTL 属性中具有定义值的项目有影响,表中的其他项目不受影响。

问:应将 TTL 指定为什么格式?

TTL 值应采用纪元时间格式,即自国际协调时间 (UTC) 1970 年 1 月 1 日到当前时间的秒数。如果项目在 TTL 属性中指定的值格式不正确,则该值将被忽略,该项目也不会被删除。

问:如何读取表中项目的 TTL 值?

TTL 值与项目的其他属性并无二致,您可以像读取任何其他属性一样来读取 TTL 值。为了更方便直观地确认 TTL 值,您可以通过 DynamoDB 控制台,将鼠标悬停在 TTL 属性上,即可看到使用人类可读的本地时间和 UTC 时间表示的 TTL 值。

问:是否可以基于分配给表中项目的 TTL 值创建索引?

可以。TTL 与任何其他项目属性一样,您可以像对其他项目属性那样基于它创建索引。

问:TTL 属性可以投射到索引吗?

可以。TTL 属性可以像任何其他属性一样投射到索引上。

问:为某个项目设置了 TTL 属性值后,是否可以对该值进行编辑?

可以。您可以修改 TTL 属性值,就像修改项目的任何其他属性一样。

是否可以修改表的 TTL 属性?

可以。如果表已经启用了 TTL 但您想为其指定其他 TTL 属性,则需要先禁用表的 TTL,然后使用新的 TTL 属性在表上重新启用 TTL。请注意,禁用 TTL 的设置可能需要一小时才能应用到所有分区,且在该操作完成之前,您无法再次启用 TTL。

问:是否可以使用 AWS 管理控制台查看和编辑 TTL 值?

可以。您可以使用 AWS 管理控制台轻松查看、设置或更新 TTL 值。

问:是否可以将 JSON 文档中的属性设置为 TTL 属性?

不可以。目前,我们不支持将 JSON 文档中的属性指定为 TTL 属性。要设置 TTL,您必须向每个项目显式添加 TTL 属性。

问:是否可以为 JSON 文档中的特定元素设置 TTL?

不可以。TTL 值只能针对整个文档进行设置,我们不支持在 JSON 文档中的特定项目过期后将其删除。

问:如果需要删除特定项目的 TTL,该怎么办?

删除 TTL 非常简单,只需删除分配给 TTL 属性的值或直接删除项目的 TTL 属性即可。

问:如果将 TTL 时间戳值设置成了过去的某个时间,该怎么办?

我们支持更新 TTL 值为过去时间的项目。当后台进程检查过期项目时,会找到该项目、进行标记并在随后将其删除。但如果 TTL 属性中的值是一个已经过去 5 年以上的时间戳纪元值,那么 DynamoDB 将忽略该时间戳且不会删除该项目。这是为了减少在 TTL 属性中存储特别低的值时发生意外删除项目的情况。

问:项目的 TTL 到期和实际删除该项目之间有多久延迟?

TTL 使用系统中的后台吞吐量来扫描和删除过期项目。因此,过期项目可能不会立即从表中删除。DynamoDB 会尽力在两天内删除过期项目,以确保系统中有足够的后台吞吐量供其他数据操作使用。从项目过期到真正被删除的确切时长将取决于工作负载的性质和表的大小。

问:如果尝试查询或扫描 TTL 已过期的项目,会发生什么?

考虑到项目过期和实际被后台进程删除之间可能存在延迟,如果您尝试读取已过期但尚未被删除的项目,则返回的结果将包括过期项目。如果不希望显示过期项目,您可以基于 TTL 值将这些项目筛选出去。

问:如果本地二级索引 (LSI) 中的数据已过期,会有什么影响?

其影响与任何删除操作相同。本地二级索引与项目本身存储在同一个分区中。因此,如果项目被删除,它将立即从本地二级索引中被删除。

问:如果全局二级索引 (GSI) 中的数据已过期,会有什么影响?

其影响与任何删除操作相同。全局二级索引 (GSI) 具有最终一致性,因此,当过期的原始项目将被删除时,GSI 可能需要一些时间才能更新。

问:TTL 如何与 DynamoDB Streams 配合使用?

因 TTL 值触发清除而导致的表中数据到期将被记录为删除操作。因此,Streams 中也记录有删除操作。删除记录中带有一个附加限定符,以便您可以区分常规删除操作和因 TTL 导致的删除操作。流条目将在删除时间点而非 TTL 到期时间写入,以反映记录被删除的实际时间。请参阅我们的文档API 指南

问:删除操作和 TTL 分别应在何时使用?

TTL 是从表中删除过期记录的理想选择。但是,此操作只会尽力帮助您删除不需要的数据,而不能保证删除时间。因此,如果表中的数据需要在特定时间段 (通常是立即) 内删除,我们建议您使用删除命令。

问:是否可以控制哪些人有权设置或更新 TTL 值?

可以。TTL 属性与表的任何其他属性一样,您可以在表的属性级别控制访问权限。TTL 属性将遵循为表指定的常规访问控制。

问:是否可以检索 TTL 到期后删除的数据?

不能。过期项目在删除之前不会备份。您可以利用 DynamoDB Streams 跟踪表上发生的更改,并根据需要恢复相应值。过期项目删除之后,删除记录会在 Streams 中保存 24 小时。

问:如何知道表是否启用了 TTL?

您可以通过调用 DescribeTable API 或在 DynamoDB 控制台中查看表的详细信息,随时获取 TTL 的状态。请参阅我们的文档API 指南

问:如何跟踪 TTL 删除的项目?

如果您启用了 DynamoDB Streams,则所有 TTL 删除都将显示在 DynamoDB Streams 中,并会被指定为系统删除,以便将其与您执行的显式删除区分开来。您可以从 Streams 中读取项目,并根据需要进行处理。此外,您还可以编写一个 Lambda 函数来单独归档这些项目。请参阅我们的文档API 指南

问:是否需要支付一定费用才能为数据启用 TTL 功能?

不需要。启用 TTL 无需支付额外费用。

问:启用 TTL 会对总体的预配置吞吐量使用率造成什么影响?

TTL 所需的扫描和删除操作由系统执行,不会计入您的预配置吞吐量或使用率。

问:是否需要为监控 TTL 的扫描操作付费?

不需要。您不需要为用于监控项目的 TTL 到期情况的内部扫描操作付费。这些操作也不会影响表的吞吐量使用率。

问:过期项目是否会累积存储成本,直到被删除为止?

会。项目过期后会被添加到删除队列中以待后续删除。但在被删除之前,它就像任何常规项目一样可以读取或更新,并将产生存储成本。

问:查询过期项目是否使用读取容量?

是的。此操作与查询表中不存在的项目时情况相同。


问:什么是 DynamoDB Accelerator (DAX)?

Amazon DynamoDB Accelerator (DAX) 是适用于 DynamoDB 的完全托管且高度可用的内存中的缓存,可让您从苛刻应用程序的快速内存内性能中受益。DAX 提高了读取操作密集型 DynamoDB 工作负载的性能,因此重复读取缓存数据时可立即实现极低的延迟并且无需从 DynamoDB 进行重新查询。DAX 将在缓存未命中时自动从 DynamoDB 表检索数据。写入被指定为直写 (数据先写入到 DynamoDB,然后在 DAX 缓存中更新)。

正如 DynamoDB 一样,DAX 可容错且可扩展。一个 DAX 集群具有一个主节点以及零个或多个只读副本节点。在主节点发生故障时,DAX 将自动故障转移并选择新的主节点。对于扩展,您可以添加或删除只读副本。

若要开始,请创建一个 DAX 集群,下载适用于 Java 或 Node.js 的 DAX SDK (与 DynamoDB API 兼容),将应用程序重新构建为使用 DAX 客户端 (而不是使用 DynamoDB 客户端),最后将 DAX 客户端指向 DAX 集群终端节点。您无需将任何其他缓存逻辑实施到应用程序中,因为 DAX 客户端将实施 DynamoDB 所实施的同一 API 调用。

问:“与 DynamoDB 兼容”意味着什么?

它表示您现在已用于 DynamoDB 的大多数代码、应用程序和工具都可以在不进行改变或只进行很少的改变的情况下用于 DAX。DAX 引擎旨在支持用于读取和修改 DynamoDB 中的数据的 DynamoDB API。不支持表管理操作,如 CreateTable/DescribeTable/UpdateTable/DeleteTable。

问:什么是内存内缓存,它对应用程序有何帮助?

缓存可将关键数据存储在内存中以进行低延迟、高吞吐量的访问,从而提高应用程序性能。对于 DAX,DynamoDB 操作的结果将被缓存。当应用程序请求存储在缓存中的数据时,DAX 可以立即提供该数据而无需针对普通 DynamoDB 表运行查询。数据通过指定数据的 Time-to-Live (TTL) 值来从 DAX 老化或收回,当所有可用内存用尽后,项目将基于最近最少使用 (LRU) 算法进行收回。

问:什么是 DAX 的一致性模型?

从 DAX 读取数据时,用户可以指定希望读取是最终一致性读取还是强一致性读取:

最终一致性读取 (默认) – 最终一致性选项可以最大程度地提高读取吞吐量和减少延迟。当某个缓存命中时,DAX 客户端将直接从缓存返回结果。当某个缓存未命中时,DAX 将查询 DynamoDB,更新缓存并返回结果集。应该注意的是,最终一致性读取可能不会反映最近完成的写入的结果。如果您的应用程序需要完全的一致性,我们建议使用强一致性读取。

强一致性读取 – 除了实现最终一致性外,DAX 还使您可以根据应用程序或应用程序某元素的要求,以灵活而有控制力的方式请求强一致性读取。强一致性读取将通过 DAX,不会将结果缓存在 DAX 中,并且返回的结果可反映在读取前收到 DynamoDB 中的成功响应的所有写入。

问:什么是 DAX 的常用案例?

DAX 有一些不相互排斥的使用案例:

需要尽可能短的读取响应时间的应用程序。某些示例包含实时出价、社交游戏和交易应用程序。DAX 为这些使用案例提供了快速的内存内读取性能。

比其他应用程序更频繁地读取少量项目的应用程序。例如,考虑一个电子商务系统,该系统对某个热门产品进行了一日促销。在销售期间,与所有其他产品相比,对该产品 (及其在 DynamoDB 中的数据) 的需求将急剧增加。为了消除某个“热”键和不均匀数据分配的影响,您可以将读取活动卸载到一个 DAX 缓存,直到一日促销结束。

不但需要进行大量读取,而且对成本很敏感的应用程序。利用 DynamoDB,您可以预置您的应用程序需要的每秒读取次数。如果读取活动增加,您可以增加您的表的预置读取吞吐量 (需额外付费)。或者,您也可以将活动从您的应用程序卸载到某个 DAX 集群,并减少您需要另行购买的读取容量单元的数量。

需要针对一组大型数据进行重复读取的应用程序。此类应用程序可能会从其他应用程序转移数据库资源。例如,一项长时间运行的区域天气数据分析可能会暂时用尽 DynamoDB 表中的所有读取容量,这可能对需要访问同一数据的其他应用程序产生负面影响。利用 DAX,可以改为针对缓存数据进行天气分析。

工作原理

问:DAX 可以代我管理哪些内容?

DAX 是适用于 DynamoDB 的完全托管的缓存。它用于管理设置专用缓存节点时涉及的工作 – 从配置服务器资源到安装 DAX 软件。当 DAX 缓存集群设置完毕并且运行之后,该服务还可自动处理常见的管理任务,如故障检测和恢复,以及应用软件修补等。DAX 提供了与您的集群相关的详细 CloudWatch 监控指标,让您能够对问题进行快速诊断和响应。使用这些指标,您可以设置阈值以接收 CloudWatch 警报。DAX 将处理所有数据缓存、检索和收回,因此您的应用程序不必执行这些工作。您只需使用 DynamoDB API 来写入和检索数据,然后 DAX 将处理所有背后的缓存逻辑以提高性能。

问:DAX 缓存哪些类型的数据?

所有读取 API 调用将由 DAX 缓存,同时强一致性读取请求将直接从 DynamoDB 读取,而最终一致性读取将从 DAX 读取 (如果项目可用)。写入 API 调用是直写 (到 DynamoDB 的同步写入,在成功写入后在缓存中更新)。

以下 API 调用将导致缓存检查。如果命中,项目将被返回。如果未命中,请求将会通过,并且在成功检索后项目将被缓存和返回。

• GetItem
• BatchGetItem
• 查询
• 扫描

以下 API 调用是直写操作。

• BatchWriteItem
• UpdateItem
• DeleteItem
• PutItem

问:DAX 如何处理数据收回?

DAX 以三种不同的方式处理缓存收回。首先,它使用 Time-to-Live (TTL) 值,表示项目在缓存中可用的绝对时间段。第二,当缓存已满时,DAX 集群使用最近最少使用 (LRU) 算法来决定要收回的项目。第三,通过直写功能,随着新值通过 DAX 写入,DAX 会收回较旧的值。这有助于使用单个 API 调用将 DAX 项目缓存与基础数据存储保持一致。

问:DAX 能否与 DynamoDB GSI 和 LSI 配合使用?

正如 DynamoDB 表一样,DAX 将缓存对 DynamoDB GSI 和 LSI 两者进行查询和扫描操作的结果集。

问:DAX 如何处理查询和扫描结果集?

在 DAX 集群中,有两种不同的缓存:1) 项目缓存和 2) 查询缓存。项目缓存管理单个键值对的 GetItem、PutItem 和 DeleteItem请求。查询缓存管理来自扫描和查询请求的结果集。在这方面,扫描/查询文本是“键”,结果集是“值”。虽然项目缓存和查询缓存都在同一个集群中进行管理 (您可以为每个缓存指定不同的 TTL 值),但它们不重叠。例如,对表的扫描不会填充项目缓存,而是会将一个条目记录到存储扫描结果集的查询缓存中。

问:对项目缓存进行更新是否会同时更新查询缓存中的结果集或使其失效?

不会。要缓解项目缓存和查询缓存中的结果集之间的不一致,最佳方法是,将查询缓存的 TTL 设置为您的应用程序可以处理这种不一致的可接受时间段。

问:我能否从我的 VPC 外部连接到我的 DAX 集群?

从 VPC 外部连接到 DA X集群的唯一方法是通过 VPN 连接。

问:当使用 DAX 时,如果我的基础 DynamoDB 表受到限制,会发生什么情况?

如果 DAX 正在读取或写入 DynamoDB 表,且接收到限制异常,DAX 会将异常返回给 DAX 客户端。此外,DAX 服务不会尝试服务器端重试。

问:DAX 是否支持缓存预热?

DAX 利用延迟加载来填充缓存。这意味着在首次读取一个项目时,DAX 将从 DynamoDB 中获取该项目,然后填充缓存。虽然 DAX 不支持缓存预热作为一项功能,但可以通过运行读取所需数据的外部脚本/应用程序来对应用程序进行 DAX 缓存预热。

问:DAX 如何与 DynamoDB TTL 功能配合使用?

DynamoDB 和 DAX 都具有“TTL”(或 Time to Live) 功能的概念。在 DynamoDB 的背景下,TTL 是一项功能,通过该功能,客户可通过使用特定属性和对应的时间戳标记数据来使其数据老化。例如,如果客户希望在数据老化一个月后删除数据,那么他们将使用 DynamoDB TTL 功能完成此任务,而不是自己管理老化工作流程。

在 DAX 的背景下,TTL 指定缓存中的项目有效的持续时间。例如,如果 TTL 设置为 5 分钟,一旦项目已经在缓存中填充,它将继续有效并在缓存中发挥作用,直到 5 分钟的时间过去。虽然 TTL 不是本会话的中心,但可以通过写入同一个项目的缓存来抢占 TTL,或者如果 DAX 节点上存在内存压力,则 LRU 会收回最近最少使用的项目。

虽然适用于 DynamoDB 和 DAX 的 TTL 通常会以截然不同的时间尺度运行 (即 DAX TTL 在分钟/小时范围内运行,DynamoDB TTL 在周/月/年范围内运行),但是客户可能需要注意这两个功能如何相互影响。例如,我们来设想 DynamoDB 的 TTL 值小于 DAX 的 TTL 值的情景。在此情景中,可以想象一个项目缓存在 DAX 中,然后通过 DynamoDB TTL 功能从 DynamoDB 中删除。结果将导致不一致的缓存。虽然我们不期望这种情景经常发生,因为这两个功能的时间尺度通常相差一定数量级,但是最好要了解两个功能是如何相互关联的。

问:DAX 是否支持跨区域复制?

目前,DAX 仅支持与 DAX 集群相同的 AWS 区域中的 DynamoDB 表。

DAX 在 AWS CloudFormation 中是否作为资源类型获得支持?

是。您可以创建、更新和删除 DAX 集群、参数组,以及使用 AWS CloudFormation 的子网组。

入门

问:如何开始使用 DAX?
您可以通过 AWS 控制台或 AWS SDK 创建新的 DAX 集群,以获取 DAX 集群终端节点。需要在具有新 DAX 终端节点的应用程序中下载和使用与 DAX 兼容的客户端。

问:如何创建 DAX 集群?

您可以使用 AWS 管理控制台或 DAX CLI 创建 DAX 集群。DAX 集群的范围:采用 R3 实例类型时是 13GiB 缓存 (dax.r3.large) 到 216GiB (dax.r3.8xlarge);采用 R4 实例类型时是 15.25GiB 缓存 (dax.r4.large) 到 488GiB (dax.r4.16xlarge);采用更小的 T2 实例类型时是 2GiB (dax.t2.small) 到 4GiB (data.t2.medium)。通过在控制台中单击几次或使用单个 API 调用,您最多可以将 10 个副本添加到集群以提高吞吐量。

利用单节点配置,您可以开始经济快速地使用 DAX,然后随着您的需求的增长扩展为多节点配置。多节点配置由一个管理写入的主节点和最多九个只读副本节点组成。主节点是自动为您配置的。

指定首选子网组/可用区 (可选)、节点数、节点类型,VPC 子网组和其他系统设置。当您选定您的理想配置后,DAX 将预置所需的资源并设置您的专门用于 DynamoDB 的缓存集群。

问:我的所有数据是否需要存储在内存中才能使用 DAX?

不需要。DAX 将利用节点上的可用内存。使用 TTL 和/或 LRU,当内存空间耗尽时,项目将被清空以腾出空间供新数据使用。

问:DAX 支持哪些语言?

DAX 可提供适用于 Java、Node.js、Python 和 .NET 的 DAX 软件开发工具包,您可以下载这些工具包。我们正积极筹划增加对其他客户端软件开发工具包的支持。

问:我是否能同时使用 DAX 和 DynamoDB?

是的,您可以通过不同的客户端同时访问 DAX 终端节点和 DynamoDB。但是,DAX 无法检测直接写入到 DynamoDB 的数据更改,除非在直接对 DynamoDB 进行任何更新后通过对已修改数据的读取操作将这些更改显式填充到 DAX 中。

问:我是否能对同一 DynamoDB 表使用多个 DAX 集群?

是的,您可以为同一 DynamoDB 表配置多个 DAX 集群。这些集群将提供可用于不同使用案例的不同终端节点,从而确保在每个情景下都实现最佳缓存。两个 DAX 集群将相互独立且不会共享状态或更新,因此用户将这些集群用于完全不同的表将获得最大的好处。

问:我如何知道我的工作负载需要哪个 DAX 节点类型?

DAX 集群的大小调整是一个迭代过程。建议为三节点集群 (用于实现高可用性) 预置足够的内存以将应用程序的工作集保留在内存中。根据应用程序的性能和吞吐量、DAX 集群的利用率和缓存命中/未命中率,您可能需要扩展 DAX 集群以实现所需的结果。

问:DAX 可在哪些类型的 Amazon EC2 实例上运行?

请参阅 Amazon DynamoDB 定价页面,了解 DAX 支持的最新实例类型。

问:DAX 是否支持预留实例或 AWS 免费使用套餐?

当前,DAX 仅支持按需实例。

问:DAX 如何定价?

DAX 的定价是按使用的节点小时数计算的,从节点启动时开始,直至节点终止。运行未满一小时的节点,将按一小时计费。定价规则适用于 DAX 集群中的所有单个节点。例如,如果您有一个三节点 DAX 集群,您将按小时针对每个单独的节点 (总计三个节点) 支付相关费用。

可用性

问:我如何利用 DAX 集群实现高可用性?

DAX 提供了内置的多可用区支持,让您可以为 DAX 集群中的节点选择首选可用区。DAX 使用异步复制来实现节点之间的一致性,这样,当发生故障时,将有额外的节点来响应请求。要为 DAX 集群实现高可用性 (针对计划内和计划外中断),我们建议在三个单独的可用区内部署至少三个节点。每个可用区域在其独立的、物理上显著不同的基础设施中运行,并已设计为具备高可靠性。

问:如果 DAX 节点发生故障会怎么样?

如果主节点发生故障,DAX 将自动检测该故障,选择其中一个可用只读副本,然后将该副本提升成为新的主节点。此外,DAX 将在发生故障的主节点的同一可用区内预置一个新节点;此新节点将取代新提升的只读副本。如果主节点由于临时可用区中断而发生故障,新副本将在可用区恢复后立即启动。如果单节点集群发生故障,DAX 将在同一可用区内启动一个新节点。

可扩展性

问:DAX 支持哪些类型的扩展?

DAX 现在支持两个扩展选项。第一个选项是读取扩展,即通过向集群添加只读副本来获得额外的吞吐量。单个 DAX 集群支持最多 10 个节点,每秒可提供数百万个请求。添加或删除额外副本是一项在线操作。扩展集群的第二种方法是通过选择更大或更小的 r3 实例类型来向上或向下扩展。更大的节点将使集群能够将应用程序的更多数据集存储在内存中,并因此减少缓存未命中并提高应用程序的整体性能。在创建 DAX 集群时,集群中的所有节点都必须属于同一实例类型。此外,如果您希望更改 DAX 集群的实例类型 (例如,从 r3.large 扩展到 r3.2xlarge),您必须使用所需的实例类型创建新 DAX 集群。DAX 当前不支持在线向上扩展或向下扩展操作。

问:如何对应用程序进行写入扩展?

在 DAX 集群中,只有主节点处理对 DynamoDB 的写入操作。因此,向 DAX 集群添加更多节点将增加读取吞吐量,但不会增加写入吞吐量。要增加应用程序的写入吞吐量,您需要向上扩展到更大的实例大小,或者预置多个 DAX 集群并在应用程序层中划分密钥空间。

监控

问:我如何监控 DAX 集群的性能?
CPU 利用率的指标、缓存命中/未命中计数和到您的 DAX 集群的读取/写入流量可通过 AWS 管理控制台或 Amazon CloudWatch API 提供。您也可以通过 Amazon CloudWatch 的自定义指标功能来添加其他的用户定义指标。除了 CloudWatch 指标之外,DAX 还通过 AWS 管理控制台提供了有关缓存命中、未命中、查询和集群性能的信息。

维护

问:什么是维护时段?DAX 集群在软件维护期间是否可用?

您可以将 DAX 维护时段视为控制进行集群修改 (如软件修补) 的时间的机会。如果在给定的星期内安排了“维护”事件,该事件将在您确定的维护时段的某个时间点启动和完成。

只有安全和可靠性的补丁会自动安排要求的修补。这种修补并非频繁出现 (通常几个月就出现一次)。如果创建集群时未指定首选每周维护时段,则会分配一个默认值。如果希望在代您执行维护时进行修改,您可以通过在 AWS 管理控制台中或使用 UpdateCluster API 修改集群来执行该操作。每个集群可能具有不同的首选维护时段。

对于多节点集群,集群中的更新将连续执行,一次更新一个节点。在更新节点之后,它将与集群中的一个对等体同步,以便节点具有当前的工作数据集。对于单节点集群,我们将预置副本 (不收费),将副本与最新数据进行同步,然后执行故障转移,以使新副本成为主节点。这样,在单节点集群的升级过程中,您不会丢失任何数据。 

问:什么是 DynamoDB Global Tables?

DynamoDB Global Tables 是 DynamoDB 新增的一项多主机跨地区复制功能,可支持数据库工作负载的数据访问局部性和区域容错。应用程序现在可以在世界各地的 AWS 地区执行对 DynamoDB 的读取和写入操作,并将任何地区中的更改传播到复制表的每个地区。

问:为什么要使用 Global Tables?

借助 Global Tables,您可以构建利用数据局部性来减少整体延迟的应用程序。您的应用程序可以将数据读取/写入到最靠近最终用户的地区,从而提高应用程序的整体响应能力。此外,Global Tables 使您的应用程序能够保持高度可用,即使在偶尔发生整个地区被隔离或降级的情况下也是如此。

问:哪些 AWS 地区支持 Global Tables?

Global Tables 目前在五个地区受支持:美国东部 (俄亥俄)、美国东部 (弗吉尼亚北部)、美国西部 (俄勒冈)、欧洲 (爱尔兰) 和欧洲 (法兰克福)。

问:我可以复制到多少个 AWS 地区?

对于支持 Global Tables 的地区,每个地区可以有一个副本表。

问:Global Tables 提供什么一致性保证?

Global Tables 可确保最终的一致性,这意味着对任何副本表中的任何项目进行的任何更新都将被复制到同一全局表中的所有其他副本中。如果对同一个项目有多个更新,则全局表中的所有副本都将同意最新的更新,因此所有副本将不断地收敛到存储相同数据的状态。

问:访问副本表时可以达到哪种程度的延迟?

如果您的应用程序托管在具有全局表的地区中,则通过其地区终端节点访问本地副本表时将表现出您期望从 DynamoDB 获得的相同几毫秒延迟。

问:Global Tables 如何定价?

有关详细信息,请参阅我们的定价页面

问:我可以将 Global Tables 与 DynamoDB 免费套餐一起使用吗?

可以。您可以创建其中每个复制表都属于免费套餐范围的全局表,只要它复制到的 AWS 地区不超过两个即可。

问:DynamoDB Global Tables 是否支持跨账户访问 (即将一个 AWS 账户的数据复制到另一个中)?

答:不支持。目前,Global Tables 仅能使用同一个 AWS 账户在不同地区之间复制数据。

问:DynamoDB 支持哪些表备份选项?

您可以为 Amazon DynamoDB 表启用时间点恢复 (PITR) 以及创建按需备份。

PITR 可以持续备份您的 DynamoDB 表数据。您可以从 AWS 管理控制台单击或执行单个 API 调用来启用 PITR。启用之后,DynamoDB 会保留过去长达 35 天的表持续备份数据。您可以将该表的副本恢复到之前启用 PITR 之后的任何时间点的状态,最多可恢复到 35 天前的状态。PITR 会提供持续备份,直到您明确禁用为止。

借助按需备份,您可以创建 DynamoDB 表数据及其设置的备份。您可以随时从 AWS 管理控制台单击或执行单个 API 调用来启动按需备份。您可以随时将备份还原到同一 AWS 区域中的新 DynamoDB 表。

无论是 PITR 和按需备份,DynamoDB 都会自动为备份加密、编写目录并存储。

问:为何要使用 PITR 和按需备份?

Amazon DynamoDB 为您的数据保护和存档提供了两种补充选项。

PITR 可为您的 DynamoDB 表提供持续保护,防止意外写入和删除。借助 PITR,您无需担心创建、维护或计划备份的问题。在表中启用 PITR 之后,您可以使用启用 PITR 之后的任何时间点的备份进行还原,您最多可以将表还原到 35 天前的状态。例如,假设一个测试脚本意外写入到生产 DynamoDB 表。您就可以将表恢复到过去 35 天内的任何时间点的状态。

按需备份有助于满足长期存档要求,以实现法规合规性。按需备份使您可以根据需要创建尽可能多的备份,还可以根据需要将这些备份保留任意长的时间,从而全面掌控备份的生命周期。

问:如何启用或禁用 PITR?

您可以使用 Amazon DynamoDB 控制台、AWS CLI 或任何 AWS 开发工具包启用或禁用 PITR?

问:如何启动按需备份?

您可以通过 Amazon DynamoDB 控制台、AWS CLI 或任何 AWS 开发工具包启动按需备份。所有按需备份操作(创建、还原和删除)均可以通过 DynamoDB 表的 Backups 选项卡执行。您还可以从控制台的导航窗格中浏览账户中按需备份的完整列表。有关按需备份和还原 API 的更多信息,请参阅 DynamoDB API 参考文档

问:按需备份和 PITR 备份可保留多长时间?

DynamoDB 会一直保留按需备份,直到您删除这些备份。PITR 会保留过去 35 天的备份。

问:我删除源表后,我的备份会怎样?

即使在删除源表后,按需备份仍然可以访问。在删除启用 PITR 的表后,系统会停止追踪更改。如果需要恢复您已删除的表,您需要联系 AWS Support 以通过 35 天恢复期内的 PITR 备份还原该表。

问:备份是否会占用源表的预配置读取或写入容量?

不会。DynamoDB 在服务中执行备份和还原操作,不会占用源表的任何预配置读取或写入容量。

问:备份是否会影响表的性能?

不会。

问:我的备份存储在哪里?

备份是使用 DynamoDB 的高持久性托管存储进行存储的,可提供简单、高性能和轻松的体验。

问:DynamoDB 可以使用 PITR 还原哪些内容?

在您还原 PITR 创建的备份时,DynamoDB 会将您的表数据还原到选定日期和时间(日:时:分:秒)的状态,并将其存入新表中。这个新表的设置沿用源表的当前设置,并包含本地二级索引、全局二级索引、加密以及读取容量单位和写入容量单位设置。

问:我能否使用 PITR 还原不同账户或 AWS 区域中的表?

不能。您只能还原源表所在的相同 AWS 区域和账户中的表。

问:表还原能否覆盖现有表?

不能。通过备份还原表时,还原流程始终会写入新表中。

问:哪些 AWS 区域支持按需备份和 PITR?

请参阅定价详情,了解有关区域可用性和定价的最新信息。

问:DynamoDB 可通过按需备份和 PITR 保留哪些内容?

除了数据之外,按需备份还会保留表的下列设置:读取容量单位、写入容量单位、本地二级索引、全局二级索引、流以及加密。按需备份不会保留自动扩展策略、PITR 设置、生存时间 (TTL)、标签以及 CloudWatch 指标和警报。

PITR 会备份表的内容,并使用该表在还原时所用的设置。

问:DynamoDB 可通过按需备份还原哪些内容?

还原时,根据请求备份时的记录,目标表被设置为与源表相同的预配置读取容量单位和写入容量单位。该过程将会还原本地二级索引和全局二级索引,但不会还原流和 TTL 数据。

问:如果我先禁用后又重新启用了 PITR,会怎样?

如果您在表中先禁用后又重新启用了 PITR,则意味着您重置了可还原该表的开始时间。例如,禁用 PITR 会移除还原快照和日志。因此,您无法恢复该表。如果您后来再次为该表启用 PITR,则 DynamoDB 将创建新的快照和日志序列。

问:完成备份和还原操作需要多长时间?

DynamoDB 可以在几秒内处理备份请求,这些备份可立即进行还原。还原表所需时间会基于多种因素而发生变化,还原时间并非一定与表大小直接相关。例如,由于并行处理的关系,还原一个 300GB 的表的用时可能与还原一个 3GB 的表的用时相同。以下是关于还原时间的一些考虑事项:

1. 您将备份还原到新表。执行用于创建新表和启动还原流程的所有操作可能最多需要 20 分钟(即使表是空的)。

2. 对于数据在主键之间均匀分布的表,还原时间与最大单分区(按项目数)而不是整体表大小成正比。对于包含数十亿项目的最大分区,还原可能需要不超过 10 小时的时间。

3. 如果您的源表中包含的数据严重倾斜,则还原时间可能延长。例如,如果表的主键使用一年中的月份进行分区,而您的所有数据均来自 12 月,那么就出现了倾斜数据。

问:我可以执行的按需备份次数有限制吗?

没有。您可以为表请求的按需备份次数没有限制。您可以在 AWS 账户中保留的备份数量没有限制。

问:使用按需备份和 PITR 的成本是多少?

请参阅定价详情,详细了解按需备份和 PITR 的定价。

问:能否使用按需备份或 PITR 备份我的 DynamoDB 表,并将其还原到其他 AWS 账户?

不能。目前,您必须通过备份将表恢复到您在其中提取备份的 AWS 账户中的相同 AWS 区域。

问:我能否备份 DynamoDB 全局表?

您可以在全局表的各个本地副本上创建按需备份或启用 PITR。当您通过备份还原时,系统会创建新的独立的表,该表不属于全局表的一部分。

问:我能否备份加密表?

可以。您可以在加密表中创建按需备份或启用 PITR。

问:按需备份与使用 AWS Data Pipeline 执行导入和导出有何不同?

由于使用全表扫描来移动 DynamoDB 表数据,因此 AWS Data Pipeline 导入和导出功能会利用表预配置的读取和写入吞吐容量并影响表性能。另一方面,按需备份不会占用任何吞吐容量,而且不会影响表的性能和可用性。DynamoDB 控制台“操作”菜单下的“导入”和“导出”选项已被删除,但仍可从 AWS Data Pipeline 控制台访问。

问:什么是 DynamoDB 静态加密?

借助 DynamoDB 静态加密,您能够为始终存在于 DynamoDB 表中的数据 (静态数据) 启用加密。其中包括基表、本地二级索引和全局二级索引。静态加密与 AWS Key Management Service (KMS) 自动集成,可以管理用于对表进行加密的密钥。

问:为什么我需要使用静态加密?

静态加密是一项托管的服务器端加密功能,使用的是存储在您的 AWS 账户中的 AWS KMS 密钥。在将数据发送到 DynamoDB 之前和检索数据之后,您都无需实施和维护其他代码来分别对其进行加密和解密。为 DynamoDB 表启用静态加密后,您的应用程序可以无缝运行,不会有任何其他变化。

问:如何加密表?

您可以使用控制台、AWS CLI 或 API 为新的 DynamoDB 表启用静态加密。目前,您无法为现有 DynamoDB 表启用静态加密。

问:我的全局二级索引 (GSI) 和本地二级索引 (LSI) 会进行静态加密吗?

会,与加密的表相关联全局二级索引 (GSI) 和本地二级索引 (LSI) 默认使用用于加密表的密钥进行加密。

问:使用 DynamoDB 静态加密会产生哪些额外费用?

使用 DynamoDB 静态加密不会产生额外的 DynamoDB 费用。但是,使用服务默认密钥时,我们会收取 KMS 费用。您可以在 AWS KMS 定价页面中查看这一费用。

问:我可以加密 DynamoDB 流吗?

目前,您无法为 DynamoDB Streams 启用静态加密。如果静态加密是一项合规性/法规要求,我们建议您针对已加密的表关闭 DynamoDB Streams。

问:DynamoDB 按需备份也会被加密吗?

是的,已加密 DynamoDB 表的按需备份也会被加密 (使用 S3 的服务器端加密)。目前,此类备份使用您的服务默认密钥和服务托管密钥进行了部分加密。我们正在争取只使用客户的 KMS 密钥来加密与按需备份相关的所有数据。

问:静态加密功能如何加密我的数据?

DynamoDB 使用信封加密来加密您的数据,在这种加密方式中,它使用具有层级结构的加密密钥来加密数据库。您使用 AWS KMS 来管理这种层级结构中的顶级加密密钥。加密数据后,Amazon DynamoDB 会以透明方式处理数据的解密,对性能的影响非常小。您无需修改数据库客户端应用程序来使用加密。

问:如何管理用于静态加密的密钥?

DynamoDB 与 AWS KMS 集成,让您可以轻松管理用于加密表的密钥。DynamoDB 静态加密使用的是存储在您的 KMS 账户中的服务默认密钥 (仅适用于 DynamoDB)。如果您在创建已加密 DynamoDB 表时没有服务默认密钥,则 KMS 会自动为您创建一个可用于日后创建的加密表的新密钥。有关更多信息,请参阅 AWS Key Management Service 开发人员指南

问:我可以选择哪些加密密钥来加密 DynamoDB 表?

目前,您只能使用用于 DynamoDB 表的服务默认密钥。如果此密钥不存在,系统会创建一个。 

问:AWS Key Management Service (KMS) 中的服务默认密钥在静态加密中有什么作用?

如果不访问您的 KMS 服务默认密钥,DynamoDB 就无法读取您的表数据。DynamoDB 使用信封加密和密钥层级结构来加密数据。您的 KMS 加密密钥用于加密这种密钥层级结构的根密钥。有关更多信息,请参阅信封加密如何与支持的 AWS 服务配合工作

问:我可以针对不同的表使用不同的服务默认密钥吗?

不可以,DynamoDB 使用一个服务默认密钥来加密您所有的 DynamoDB 表。

问:我可以只加密表中的一部分项目吗?

不可以。静态加密的最小范围是一个表。

问:如何检查我的表是否启用了静态加密?

在控制台中,您可以从“概览”标签的“表详细信息”部分查看加密状态。您还可以使用 DescribeTable 命令来查看表的加密状态。 

问:为一个表启用静态加密功能后,可以将其禁用吗?

不可以,无法对已加密的表禁用静态加密。

问:静态加密与 DynamoDB 客户端加密库有何不同?

客户端加密库 (即 Amazon DynamoDB Encryption Client for Java) 在客户端加密和解密数据 (在您的应用程序中使用 AWS SDK)。加密密钥驻留在客户端。DynamoDB 无权访问您的加密密钥,也就无法访问解密后的数据。服务器端静态加密功能在数据存储到 DynamoDB 表之前加密数据。DynamoDB 使用您指定的 KMS 加密密钥在服务器端加密和和解密数据。您仍然可以对已加密的数据执行所有查询功能。

问:通过网络传输数据时,静态加密功能可以为其提供保护吗?

不可以。静态加密功能仅加密位于持久性存储媒介上的静态数据。要确保数据在通过公有或私有网络进行传输时 (传输中的数据) 的安全,您必须在客户端加密敏感数据或者使用加密连接 (TLS)。

问:静态加密使用的是哪种加密算法?

静态加密功能使用 256 位 AES 加密算法加密数据。

问:静态加密如何与 DynamoDB 全局表配合使用?

您可以在全局表副本上启用静态加密。请注意,全局表使用 DynamoDB 流,而 DynamoDB 流还不支持静态加密。因此,不会对 DynamoDB 流上的复制数据进行静态加密。

问:什么是适用于 Amazon DynamoDB 的 VPC 端点?

Amazon Virtual Private Cloud (VPC) 是一种 AWS 服务,可允许用户在 AWS 云中预配置出一个采用逻辑隔离的部分,从而为其提供虚拟私有云。适用于 Amazon DynamoDB 的 VPC 端点是 VPC 中的逻辑实体,能够通过 Network Address Translation (NAT) 设备或 VPN 连接在 VPC 和 DynamoDB 之间建立私有连接,无需访问 Internet。有关 VPC 端点的更多信息,请参阅 VPC 端点

问:为什么应该使用适用于 DynamoDB 的 VPC 端点?

过去,从 VPC 中访问 Amazon DynamoDB 的主要方法是通过 Internet,这种方法可能需要复杂的配置,比如防火墙和 VPN。适用于 DynamoDB 的 VPC 端点支持从 VPC 中对 DynamoDB 进行私人访问,无需 Internet 网关或 NAT 网关,从而改善了客户的隐私保护和安全性,尤其是那些需要处理具有合规性与审核要求的敏感型工作负载的客户。此外,适用于 DynamoDB 的 VPC 端点支持使用 AWS Identity and Access Management (IAM) 策略简化 DynamoDB 访问控制。您现在可以轻松地将 DynamoDB 表的访问权限限制到特定 VPC 端点。

问:如何开始使用适用于 DynamoDB 的 VPC 端点?

您可以使用 AWS 管理控制台、AWS 开发工具包或 AWS 命令行界面 (CLI) 创建适用于 Amazon DynamoDB 的 VPC 端点。您必须指定 VPC 和该 VPC 中的现有路由表,并描述要附加到相应端点的 IAM 策略。路由可自动添加至每个指定的 VPC 路由表。

问:适用于 DynamoDB 的 VPC 端点可以确保流量不会路由到 Amazon 网络外吗?

可以,在使用适用于 Amazon DynamoDB 的 VPC 端点时,DynamoDB 和 VPC 之间的数据包将始终位于 Amazon 网络中。

问:我可以使用适用于 DynamoDB 的 VPC 端点连接到我的 VPC 以外的其他 AWS 地区中的 DynamoDB 表吗?

不可以,VPC 端点只能针对 VPC 所在 AWS 地区中的 Amazon DynamoDB 表创建。

问:适用于 DynamoDB 的 VPC 端点会限制 DynamoDB 的吞吐量吗?

不会,就像您如今在 VPC 中使用公有 IP 的实例一样,您将继续获得同样的 Amazon DynamoDB 吞吐量。

问:使用适用于 DynamoDB 的 VPC 端点的费用是什么?

使用适用于 Amazon DynamoDB 的 VPC 端点不收取任何额外费用。

问:我可以使用适用于 DynamoDB 的 VPC 端点访问 DynamoDB 流吗?

目前,您无法使用适用于 Amazon DynamoDB 的 VPC 端点访问 Amazon DynamoDB 流。

问:我目前使用 Internet 网关和 NAT 网关向 DynamoDB 发送请求。我需要在使用 VPC 端点时更改应用程序代码吗?

您不需要更改应用程序代码。只需创建一个 VPC 端点,更新您的路由表以将 Amazon DynamoDB 流量指向 DynamoDB VPC 端点,即可直接访问 DynamoDB。您可以继续使用相同的代码和 DNS 名称访问 DynamoDB。

问:我可以将一个 VPC 端点同时用于 DynamoDB 和其他 AWS 产品吗?

不可以,每个 VPC 端点支持一种服务。您可以为 Amazon DynamoDB 和其他 AWS 产品各创建一个 VPC 端点,并在一个路由表中使用它们。 

问:我可以在一个 VPC 中拥有多个 VPC 终端节点吗?

可以,您可以在一个 VPC 中拥有多个 VPC 终端节点。例如,您可以有一个适用于 Amazon S3 的 VPC 端点和一个适用于 Amazon DynamoDB 的 VPC 端点。

问:我可以在一个 VPC 中拥有多个适用于 DynamoDB 的 VPC 端点吗?

可以,您可以在一个 VPC 中拥有多个适用于 Amazon DynamoDB 的 VPC 端点。单个 VPC 端点可能拥有不同的 VPC 端点策略。例如,您可以拥有一个只读的 VPC 端点和一个可读/写的 VPC 端点。但是,VPC 中的一个路由表只能与一个适用于 DynamoDB 的 VPC 端点相关联,因为该路由表将通过指定 VPC 端点将所有流量路由至 DynamoDB。

问:适用于 S3 的 VPC 端点和适用于 DynamoDB 的 VCP 端点有何区别?

主要区别是这两种 VPC 端点支持不同的服务,分别是 Amazon S3 和 Amazon DynamoDB。

问:对于来自适用于 DynamoDB 的 VPC 端点的流量,我在 AWS CloudTrail 日志中看到的 IP 地址是什么?

Amazon DynamoDB 的 AWS CloudTrail 日志将包含 VPC 中 Amazon EC2 实例的私有 IP 地址和 VPC 端点标识符 (例如,sourceIpAddress=10.89.76.54,VpcEndpointId=vpce-12345678)。

问:如何使用 AWS 命令行界面 (CLI) 管理 VPC 端点?

您可以使用以下 CLI 命令管理 VPC 端点:create-vpc-endpoint、modify-vpc-endpoint、describe-vpc-endpoint、delete-vpc-endpoint 和 describe-vpc-endpoint-services。您应该指定特定于您的 VPC 和 DynamoDB 地区的 Amazon DynamoDB 服务名称 (例如,com.amazon.us.east-1.DynamoDB)。有关更多信息,请参阅 create-vpc-endpoint

问:适用于 DynamoDB 的 VPC 端点是否需要客户知悉和管理 DynamoDB 的公有 IP 地址范围?

否,客户不需要知悉或管理 Amazon DynamoDB 的公有 IP 地址范围即可使用此功能。将提供一个前缀表,以用于路由表和安全组。AWS 将维持列表中的地址范围。前缀列表名称是:com.amazonaws. .DynamoDB (例如,com.amazonaws.us-east-1.DynamoDB)。

问:我可以在适用于 DynamoDB 的 VPC 端点上使用 AWS IAM 策略吗?

可以。您可以将 AWS IAM 策略附加到 VPC 端点,该策略将通过此端点应用到所有流量。例如,使用该策略的 VPC 端点只允许描述* API 调用:
{
    "Statement":  [
       {
            "Sid": "Stmt1415116195105",
            "Action": "dynamodb:describe*",
            "Effect": "Allow",
            "Resource": "arn:aws:dynamodb:region:account-id:table/table-name",
            "Principal": "*"
        }
    ]
}

问:我可以限制从 VPC 端点访问 DynamoDB 表吗?

可以,您可以创建一个 AWS IAM 策略,将一个 IAM 用户、组或角色限制到某个特定的适用于 DynamoDB 的 VPC 端点表。

可将 IAM 策略的“资源”元素设置为一个 DynamoDB 表,并将“条件”元素的密钥设置为 aws:sourceVpce,从而实现这一点。有关更多详细信息,请参阅 IAM JSON 策略元素参考

例如,以下 IAM 策略可限制对 DynamoDB 表的访问,除非 sourceVpce 为“vpce-111bbb22”

{
    "Statement":  [
       {
            "Sid": "Stmt1415116195105",
            "Action": "dynamodb:*",
            "Effect":"Deny",
            "Resource": "arn:aws:dynamodb:region:account-id:*",
            "Condition": { "StringNotEquals" : { "aws:sourceVpce": "vpce-111bbb22" } }
        }
    ]
}

问:适用于 DynamoDB 的 VPC 端点是否支持将 IAM 策略条件用于精细的访问控制?

是。适用于 DynamoDB 的 VPC 端点支持所有精细的访问控制访问密钥。您可以将 AWS IAM 策略条件用于精细的访问控制,以控制对单个数据项目和属性的访问。有关精细访问控制的更多信息,请参阅将 IAM 策略条件用于精细的访问控制

问:我可以使用 AWS 策略生成器为 DynamoDB 创建 VPC 端点策略吗?

可以,您可以使用 AWS 策略生成器创建 VPC 端点策略。

问:DynamoDB 是否支持类似于 Amazon S3 存储桶策略的基于资源的策略?

否,Amazon DynamoDB 不支持与单个表、项目等有关的基于资源的策略。