在发电机表中,我想通过选择属性值与一组值之一匹配的所有项目进行查询。例如,我的表具有current_status属性,因此我希望所有具有“ NEW”或“ ASSIGNED”值的项目。 如果我将GSI应用于current_status属性,看起来我必须在两个查询中执行此操作?还是扫描?
答案 0 :(得分:0)
DynamoDB不建议使用扫描。仅当没有其他选择并且您的数据量很小时才使用它。
您需要在此处使用GSI。将current_status放在GSI的PK中会导致热点 分区问题。
正确的解决方案是将随机数放在GSI的PK中,范围从0..N,其中N是分区数。并将状态与时间戳或某些唯一信息一起放在GSI的SK中,以保持PK-SK对唯一。因此,当您要基于current_status查询时,请与PK并行执行N个查询,范围从0..N,SK与current_status一起开始。 N应该根据您拥有的数据量来确定。如果每行上的数据小于4kb,则此并行查询操作将消耗N个读取单元,而不会出现热分区问题。以下链接提供了有关此内容的详细信息
these https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-indexes-gsi-sharding.html