DynamoDB 延迟是否取决于每个分区的项目数

Does DynamoDB latency depend on number of items per partition

这里是 DDB 的新手。我已经使用 DDB table 一年了。最近,我通过使用 gzip 压缩有效负载(并在 DDB 中将其表示为二进制文件)并将新数据存储在另一个新创建的 beta table 中进行了改进。整体压缩为 3 倍。我预计读取延迟 (GetItem) 会有所改善,并且通过网络传输的数据会更少。但是,我看到读取延迟从 ~ 50ms p99.9 增加到 ~114 ms p99.9。我不确定这是怎么发生的,并且想知道是否由于压缩,现在每个分区都有很多行(我认为定义为 <= 10 GB)。我现在每个分区的行数增加了 3-4 倍。所以,我想知道一旦 dynamoDb 确定分区键的正确分区,那么在分区内它如何找到正确的项目?直觉是这不应该导致延迟增加,因为分区的简化表示可以是一个巨大的哈希图,所以它只是一个简单的查找。我将不胜感激。

我的 DDB 架构:

分区键 - 用户 ID、数据集名称

范围键-更新时间戳

payload - 以前是字符串,现在是 compressed/binary.

在我的 GetItem 请求中,我指定了分区键和范围键。

根据您的描述,您的更改包括两个不相关的部分:您压缩了负载,并增加了每个分区的项目数。第一个变化 - 压缩 - 可能对 p99 延迟影响很小(它可能对 mean 延迟有更显着的影响 - 根据利特尔定律,这与吞吐量有关,如果您的客户端具有固定的并发性 - 但我希望它会降低,而不是增加)。

一些 猜测 可能增加 p99 延迟的原因:

  1. 每个分区有更多项目意味着 DynamoDB(使用 B 树)需要进行更多磁盘读取才能找到特定项目。由于每次磁盘访问都有因排队而导致的罕见延迟,这会增加尾部延迟。

  2. 您说更改导致每个分区容纳更多项目,我猜这意味着您现在的分区更少了。如果它们太少,您可能会开始在不同的 DynamoDB 分区上获得不平衡的负载,以及特定 "hot" 分区的更多争用和延迟。

  3. 我不知道你是怎么衡量延迟的。您的客户现在需要(我猜)解压缩返回的结果,也许它现在更忙,在客户端中添加队列延迟?您能否降低客户端的并发性(并行的客户端线程数 运行),看看高尾延迟是服务器设计还是客户端设计的产物?