获取DynamoDB表中的最后N条记录

时间:2013-07-05 18:13:47

标签: amazon-dynamodb

有没有办法从dynamodb表中获取最后N条记录。我拥有的范围键是时间戳。所以我可以使用ScanIndex向前按时间顺序订购商品。

但是为了查询我需要有一个hashKey条件,我不想过滤。有什么想法吗?

2 个答案:

答案 0 :(得分:18)

DynamoDB不是以这种方式工作的。这些项目是根据HashKey上的哈希值分发的,这样订单就是不可预测的。

您的选择包括:

  • 将项目分组到一个哈希键下(不推荐:您的数据会使一些服务器过载,而亚马逊无法保证您的读/写容量)
  • 扫描整个表并保留N个最新项目(类似for (item in items) { if (item newer then oldest accumulated item) accumulate item; });
  • 将您的表分成多个表(即,而不是名为Events的表,为今天的事件创建一个名为Events20130705,为明天的事件创建Events20130706,并扫描就像上一个选项 - 这样扫描更小

您也可以更改数据模型。例如,您可以拥有一个版本化条目,该条目将保留对N个最新项目的引用。或者您可以使用单个计数器来增加和更新其他条目,例如 recent-K ,其中K是您的计数器模型N.

也许你甚至可以使用其他工具来完成这项工作。例如,您可以使用Redis服务器来执行此操作。如果不更详细地了解您的用例,很难做出精确的建议 - 这应该具有多大的可扩展性?应该有多可靠?你愿意做多少维护?你愿意付多少钱?

通常更好地接受限制,了解您的约束并具有创造性。

答案 1 :(得分:0)

我不确定这是否仍然相关。我很确定你可以使用ScanIndexForward和rangeKey来获得最新值。