我将推文存储在DynamoDB
中。我使用推文的id
属性作为散列键和推文的created_at
属性。
我想查询表中的所有推文,以查找特定日期之后的所有推文。我知道我需要为推文的GSI
属性制作一个timestamp
(全局二级索引),这样我就可以在特定日期之后查询所有推文而无需推文。 id
财产。这是真的?如果是这样,我是否正确地做到了这一点:(我很困惑为什么我需要为GSI指定一个哈希键和一个范围键?)
答案 0 :(得分:1)
所以基本上你想在DynamoDB中的属性上创建一个范围索引。运气好,因为这不是作者的想法。我会解释一下。
DynamoDB希望项目为distributed evenly across hashes并具有统一负载。你的twitter_id哈希密钥肯定有帮助,但是当你想询问有关范围键的问题时,你会失败。
你看,如果你想要速度 - 你想要query填充Query = index和Scan = no index。查询需要使用哈希键进行查询 - 如果没有查询,则无法进行查询。
你是正确的,你不能使用你原来的主键,你正确考虑GSI
- 你可以传递哈希键,通过创建一个GSI,有一个常量哈希*和时间戳作为范围。
但是
如果你这样做,你就会通过索引没有分发来打破DynamoDB的性能。这可能会导致您头痛并产生不良吞吐量(您支付的费用将超过您的消费)。
我在恒定哈希值上放了一个星号,因为你可以做一些操作来创建几个哈希并将它们组合在应用程序级别中。
总而言之,可以用Dynamo做你想做的事,但它不适合Dynamo。