繁体   English   中英

python dynamodb扫描吞吐量错误

[英]python dynamodb scan throughput error

我有一个数据库,该数据库具有segment_id,beat_id,Patient_id

在dynamoDB版本2中,当我使用以下命令进行扫描时,我只能获取1位特定患者的值。 当我输入其他细分时,患者会得到一个ThroughputExceededException。

table.scan(segment_id__eq='xCrKYvnfZlm6VCQ',beat_id__gt=1,patient_id__eq='3854520.edf')
  1. 为什么只对1位患者起作用,而对其他患者却给出ThroughputExceededException?

您执行的扫描将读取DynamoDB表中的每个项目,如果满足指定条件(segment_id__eq ='xCrKYvnfZlm6VCQ',beat_id__gt = 1,Patient_id__eq ='3854520.edf'),则将其返回。 每次读取(即使该项目不符合条件)也会消耗您预配置的读取容量。 如果要检索单个记录,则对DynamoDB使用GetItemBatchGetItem调用将是最有效的,因为您只会消耗指定项目的读取容量。 如果您要检索特定范围的记录,则使用范围键全局本地二级索引将更加有效,这样您就可以查询项目,因为您只会消耗满足查询条件的所有项目的读取容量。 您能否提供有关表架构的更多信息?

请参阅此开发人员指南 ,其中详细描述了扫描和查询之间的区别。

例如,如果segment_id是哈希键,beat_id是范围键,则使用查询。 您可以查询具有指定segment_id和指定beat_id范围的所有记录。 这只会消耗检索这些特定记录所需的读取容量,而不是读取整个表。 此外,您可以将查询过滤器应用于其他属性,例如Patient_id,以便仅返回所需的结果。

有关扫描/查询消耗容量的更多详细信息:

查询和扫描都是最终一致的读取,因此一个读取容量单位将使您以每秒8KB的速度读取数据。

如果您仍然遇到节流问题,可以使用以下几种方法来减轻异常:

  1. 增加请求之间的时间,以使您的读取速率保持在预配置的读取容量以下。 默认情况下,SDK 重试限制异常。
  2. 增加预配置的读取容量以说明项目大小和请求率。 有关预配置吞吐量如何工作以及如何 计算项目大小的信息,请参见这些资源。

有关扫描定价的更多详细信息:

要弄清楚需要使用“扫描”或“查询”来读取表中项目的读取容量,请执行以下操作:

  1. 弄清楚您正在读取多少数据(总计将要读取的所有项目的大小)
  2. 四舍五入到最接近的4KB倍数
  3. 用4KB(严格一致的读取)或8KB(最终一致的读取)除以得到将要使用的容量单位数。

要弄清需要使用GetItem或BatchGetItem读取表中项目的读取容量,请执行以下操作:

  1. 对于每个单独的项目,将其大小四舍五入到最接近的4KB倍数
  2. 除以4KB(高度一致的读取)或8kb(最终一致的读取),得出每个单个项目将消耗的容量单位数。
  3. 将每个项目要消耗的容量单位加起来,以获得要消耗的容量单位总数。

举例来说,假设我的表中有10个项目,它们都是1KB,并且我计划使用最终一致的操作来检索它们。 如果我使用GetItem检索它们,则每个单独的项目将消耗读取容量单位的1/2,因此总成本将为1/2 * 10 = 5个读取容量单位。 如果我通过扫描检索它们,则合并的所有项目的总大小为10KB,这将消耗2个读取容量单位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM