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

Adi*_*GuN 18 amazon-dynamodb

有没有办法从dynamodb表中获取最后N条记录.我拥有的范围键是时间戳.所以我可以使用ScanIndex按顺序按时间顺序排列项目.

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

Bru*_*eis 19

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服务器来执行此操作.如果不更详细地了解您的用例,很难做出精确的建议 - 这应该具有多大的可扩展性?应该有多可靠?你愿意做多少维护?你愿意付多少钱?

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

  • 看起来这个答案,从2013年开始,只是得到了一个downvote.任何具体原因?我在问题的上下文中重读它,它似乎仍然适用(基本上唯一的区别是,2.5年后,在2015年12月,DynamoDB将哈希和范围重命名为分区和排序键,但它们在概念上等同并保留他们在API中的原始名称) (4认同)