python dynamodb扫描吞吐量错误

python dynamodb扫描吞吐量错误,python,amazon-dynamodb,database-scan,Python,Amazon Dynamodb,Database Scan,我有一个数据库,有段id,节拍id,病人id 在dynamoDB版本2中,当我使用以下命令进行扫描时,我只能获得1个特定患者的值。当我输入其他段时,患者值我得到一个直通的OutExceedeDexception table.scan(segment_id__eq='xCrKYvnfZlm6VCQ',beat_id__gt=1,patient_id__eq='3854520.edf') 为什么它只对1名患者有效,而对其他患者则提供了一个全面的预防 您正在执行的扫描读取DynamoDB表中的每个项

我有一个数据库,有段id,节拍id,病人id

在dynamoDB版本2中,当我使用以下命令进行扫描时,我只能获得1个特定患者的值。当我输入其他段时,患者值我得到一个直通的OutExceedeDexception

table.scan(segment_id__eq='xCrKYvnfZlm6VCQ',beat_id__gt=1,patient_id__eq='3854520.edf')
  • 为什么它只对1名患者有效,而对其他患者则提供了一个全面的预防

  • 您正在执行的扫描读取DynamoDB表中的每个项目,并在其满足指定条件时返回它(segment_id_uueq='XcrkyvFnzlm6vcq',beat_id_ugt=1,patient_id_ueq='3854520.edf')。每次读取(即使项目不符合条件)都会消耗您提供的读取容量。如果您希望检索单个记录,那么使用或调用DynamoDB将是最有效的,因为您将只消耗指定项的读取容量。如果您希望检索特定范围的记录,则使用or命令可以更高效地检索这些项,因为您将只消耗满足查询条件的所有项的读取容量。您能提供更多关于表模式的信息吗

    请参阅详细描述扫描和查询之间差异的部分

    使用查询的一个示例是,segment_id是散列键,beat_id是范围键。您可以查询具有指定段id和指定节拍id范围的所有记录。这只会消耗检索这些特定记录所需的读取容量,而不会读取整个表。此外,您可以将查询应用于其他属性,如patient_id,以便只返回您想要的结果

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

    查询和扫描最终都是一致的读取,所以一个读取容量单元可以让您以每秒8KB的速度读取

    如果您仍然遇到节流,以下是一些缓解异常的方法:

  • 增加两次请求之间的时间间隔,以使您的读取速率保持在设置的读取容量之下。默认情况下,SDK限制异常
  • 增加已设置的读取容量,以考虑项目大小和请求速率。 请参阅和上的这些资源
  • 有关扫描定价的更多详细信息:

    要计算使用扫描或查询读取表中的项目所需的读取容量,请执行以下操作:

  • 计算您正在读取的数据量(将要读取的所有项目的大小相加)
  • 四舍五入至4KB的最接近倍数
  • 除以4KB(强一致性读取)或8KB(最终一致性读取),得到将消耗的容量单元数
  • 要计算使用GetItem或BatchGetItem读取表中项目所需的读取容量,请执行以下操作:

  • 对于每个单独的项目,将该项目的大小四舍五入到4KB的最接近倍数
  • 除以4KB(强一致性读取)或8kb(最终一致性读取),得到每个项目将消耗的容量单位数
  • 将每个项目将消耗的容量单位相加,以获得将消耗的容量单位总数

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

    这将消耗大量读取容量。回答太棒了。谢谢因此,查询是我正在寻找的函数(而不是扫描):)