【发布时间】:2019-09-05 11:05:16
【问题描述】:
在发电机表中,我想通过选择属性值与一组值中的一个匹配的所有项目进行查询。例如,我的表有一个 current_status 属性,所以我想要所有具有“NEW”或“ASSIGNED”值的项目。 如果我将 GSI 应用于 current_status 属性,看起来我必须在两个查询中执行此操作?或者改为扫描?
【问题讨论】:
标签: amazon-dynamodb dynamodb-queries
在发电机表中,我想通过选择属性值与一组值中的一个匹配的所有项目进行查询。例如,我的表有一个 current_status 属性,所以我想要所有具有“NEW”或“ASSIGNED”值的项目。 如果我将 GSI 应用于 current_status 属性,看起来我必须在两个查询中执行此操作?或者改为扫描?
【问题讨论】:
标签: amazon-dynamodb dynamodb-queries
DynamoDB 不建议使用扫描。仅在没有其他选择并且您的数据量相当少时才使用它。
您需要在此处使用 GSI。将 current_status 放入 GSI 的 PK 会导致 hot 分区问题。
正确的解决方案是在GSI的PK中放入随机数,范围从0..N,其中N是分区数。并在 GSI 的 SK 中放入状态,以及时间戳或一些唯一信息,以保持 PK-SK 对的唯一性。所以当你想基于current_status查询时,并行执行N个查询,PK范围为0..N,SK开始_with current_status。 N 应根据您拥有的数据量来确定。如果每行的数据小于 4kb,则此并行查询操作将消耗 N 个读取单元,而不会出现热分区问题。以下链接提供了有关此的详细信息
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-indexes-gsi-sharding.html https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-modeling-nosql-B.html
【讨论】: