22

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

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

4

2 回答 2

22

DynamoDB 并非旨在以这种方式工作。这些项目是根据 HashKey 上的散列分布的,其顺序是不可预测的。

您的选择包括:

  • 将项目分组在单个哈希键下(不推荐:您的数据会使一些服务器超载,亚马逊无法保证您的读/写能力)
  • 扫描整个表格并保留最近的 N 个项目(类似于for (item in items) { if (item newer then oldest accumulated item) accumulate item; });
  • 将您的表划分为多个表(即,代替名为 的表,为今天的事件、明天的事件Events创建一个名为的表),然后像上一个选项一样进行扫描——这样您的扫描会更小Events20130705Events20130706

你也可以改变你的数据模型。例如,您可以有一个版本化的条目来保留对 N 个最新项目的引用。或者你可以有一个类似单个计数器的东西,你可以在哈希键下增加和更新 N 个其他条目,例如最近的 K,其中 K 是你的计数器 mod N。

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

通常最好接受限制,了解您的限制并发挥创造力。

于 2013-07-05T18:40:14.883 回答
0

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

于 2015-06-25T21:58:19.863 回答