筛选“开头为”是否会导致DynamoDB中的高读取?

时间:2019-06-27 20:16:32

标签: amazon-web-services nosql amazon-dynamodb

我有一个假设的数据库,该数据库可以跟踪全球的街道地址。分区键是国家/地区,排序键是指街道的州和邮政编码。例如,一项可能看起来像CA#90210

(显然这存在很大的本地化和分布问题,但这是一个假设)

我在美国有10,000个项目,如果我查询并过滤排序键为“以CA开头”(这可能返回900个项目),而分区键为美国,则DynamoDB仅将RCU用于找到900个项目或使用“ US”分区键的10,000个项目?

同样,如果我确实在邮政编码中使用邮政编码,是否仅将其保留在数据库的另一列中以供Web应用程序读取是否正确?

1 个答案:

答案 0 :(得分:1)

  

如果我查询并过滤排序键为“以CA开头”(可能返回900项),并将分区键过滤为US,DynamoDB将仅使用RCU来处理900项

是的,starts with查询只会触摸以该值开头的项目。

换句话说,Query()始终需要使用索引,该索引可以是具有复合主键的表,也可以是本地/全局辅助索引。

Scan()是一个远离的地方,必须读取表中的每条记录。

  

如果我确实在邮政编码中使用邮政编码,是否仅将其保留在数据库的另一列中以供Web应用程序读取是否正确?

可能,否则您的客户将不得不为每个记录拆分排序键本身。拥有两次值所需的额外空间并不大。