本文(https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-indexes-gsi-sharding.html)讨论了一种技术,该技术通过引入随机整数作为分区键来跨多个分区分片全局二级索引值。
这对我来说很有意义,但本文并未明确说明如何查询该索引。假设我使用1-10之间的随机整数作为分区键,并使用数字作为排序键,并且我想从所有分区中获取具有最高排序键值的3条记录。
我是否需要做10个单独的查询,对每个查询进行排序,限制为3个项目,然后对所得的30个项目进行内存排序并选择前3个?这似乎不必要地复杂,并且对客户而言不是很有效。
是否有某种方法可以执行一个DynamoDB操作来查询所有10个分区,进行排序并仅返回3个具有最高vavlue的记录?
答案 0 :(得分:2)
我需要做10个单独的查询
是的。在Dynamo文档中,这称为分散阅读。
通常,客户端会使用多个线程来执行此操作...因此,尽管它增加了复杂性,但效率通常很高。
为什么限制为3?该要求似乎是效率低下的主要原因。
是否有某种方法可以执行一个DynamoDB操作来查询所有10个分区,进行排序并仅返回3个具有最高vavlue的记录?
查询所有分区的唯一方法是使用完整表Scan
。但这不提供排序和排序。您仍然需要在您的应用程序中执行此操作。扫描的效率要比散布读取低。
如果这是“三大卖家”类型列表...我认为建议的做法是(定期)计算和存储结果。而不是必须不断得出结果。在这里看看:Using Global Secondary Indexes for Materialized Aggregation Queries