我有一个假设的数据库,该数据库可以跟踪全球的街道地址。分区键是国家/地区,排序键是指街道的州和邮政编码。例如,一项可能看起来像CA#90210
。
(显然这存在很大的本地化和分布问题,但这是一个假设)
我在美国有10,000个项目,如果我查询并过滤排序键为“以CA
开头”(这可能返回900个项目),而分区键为美国,则DynamoDB仅将RCU用于找到900个项目或使用“ US”分区键的10,000个项目?
同样,如果我确实在邮政编码中使用邮政编码,是否仅将其保留在数据库的另一列中以供Web应用程序读取是否正确?
答案 0 :(得分:1)
如果我查询并过滤排序键为“以CA开头”(可能返回900项),并将分区键过滤为US,DynamoDB将仅使用RCU来处理900项
是的,starts with
查询只会触摸以该值开头的项目。
换句话说,Query()
始终需要使用索引,该索引可以是具有复合主键的表,也可以是本地/全局辅助索引。
Scan()
是一个远离的地方,必须读取表中的每条记录。
如果我确实在邮政编码中使用邮政编码,是否仅将其保留在数据库的另一列中以供Web应用程序读取是否正确?
可能,否则您的客户将不得不为每个记录拆分排序键本身。拥有两次值所需的额外空间并不大。