设计分区键并有效使用的最佳实践 - Amazon DynamoDB

设计分区键并有效使用的最佳实践

唯一标识 Amazon DynamoDB 表中每个项目的主键可以是简单结构(仅分区键)或复合结构(分区键与排序键的组合)。

通常应设计应用程序,在表的所有逻辑分区键及二级索引中实现统一操作。可以确定应用程序所需的访问模式,以及每个表和二级索引所需的读取与写入单位。

默认情况下,表中的每个分区都将努力提供 3,000 个 RCU 和 1,000 个 WCU 的全部容量。表中所有分区的总吞吐量可能受预置模式下的预置吞吐量的限制,或按需模式下的表级吞吐量的限制。有关更多信息,请参阅服务限额

有效使用容量暴增

DynamoDB 通过容量暴增,为吞吐量调配提供一定的灵活性。如果未完全使用可用的吞吐量,DynamoDB 将为稍后的吞吐量暴增保留一部分未使用的容量以应对用量峰值。

DynamoDB 目前保留最多 5 分钟(300 秒)未使用的读取和写入容量。在读取或写入操作偶尔暴增期间,可以快速消耗这些额外容量单元 - 甚至比已经为表定义的每秒预置吞吐容量还快。

DynamoDB 还可能在不事先通知的情况下,将暴增容量用于后台维护和其他任务。

请注意,这些暴增容量详细信息未来可能发生变化。

了解 DynamoDB 自适应容量

自适应容量功能允许 DynamoDB 无限期地运行不平衡工作负载,最大程度减少吞吐量异常导致的节流。还支持仅预置所需吞吐容量,帮助降低成本。

自适应容量对每个 DynamoDB 表自动启用,无附加费用。无需明确启用或禁用。

将吞吐能力提高到高流量分区

无法始终做到均匀分配读取和写入操作。如果数据访问不平衡,“热门”分区的读取和写入量将高于其他分区。由于分区上的读取和写入操作是独立管理的,因此如果单个分区接收 3000 次以上的读取操作或 1000 次以上的写入操作,则会发生节流。

为了更好地适应不均匀访问模式,DynamoDB 自适应容量允许应用程序继续对热门分区进行读写操作,而不节流,前提是流量未超出表的总预置容量或分区最大容量。自适应容量自动即时增加接收更多流量的分区的吞吐容量。

下图说明自适应性容量的工作方式。示例表配置了 400 个 WCU,均匀分布在 4 个分区,每个分区每秒可以承受最多 100 个 WCU。分区 1、2 和 3 各接收 50 WCU/秒的写入流量。分区 4 接收 150 WCU/秒。这个热门分区可以接收写入流量,同时仍具有未使用的暴增容量,但最终将节流超过 100 WCU/秒的流量。

DynamoDB 自适应容量通过增加分区 4 的容量来应对,这样可以承受接收 150 WCU/秒的更高工作负载,而不会节流。

隔离频繁访问的项目

如果应用程序到一个或多个项目的流量特别高,自适应容量将重新平衡分区,使频繁访问的项目不在同一分区中。这种隔离频繁访问的项目的做法,可以降低因工作负荷超出单个分区上的吞吐量配额而造成请求限制的可能性。您还可以通过排序键将项目集合分为多个区段,只要项目集合不是由排序键的单调增加或减少跟踪的流量即可。

如果应用程序带来的高流量始终针对单个项目,自适应容量可能重新平衡数据,以使分区仅包含单个频繁访问的项目。在此情况下,DynamoDB 可以为这个项目的主键提供达到分区最大 3000 RCU 和 1000 WCU 的吞吐量。当表上有本地二级索引时,自适应容量不会跨表的多个分区拆分项目集合。

注意

对于使用已启用 DynamoDB Streams已预置读/写容量模式的表,此隔离功能不可用。