【发布时间】:2020-05-13 21:40:48
【问题描述】:
我有一个具有以下结构的 dynamodb 表
userId -> hashkey
timestamp -> sortkey
//other fields
我想在这个表上执行两个主要查询。
- 获取用户的所有条目 -> 这很简单,因为我可以对 hashkey 进行查询
- 获取最近的 N 个条目 -> 不确定执行此操作的最佳方法是什么。我将在 UI 中显示这些,所以我需要进行分页。我应该使用扫描吗?还是在时间戳上创建 GSI 并使用查询?
还有其他建议吗?谢谢。
2014 年 5 月更新 这里有很多很好的建议。我仍在试图弄清楚如何最好地实现这一点,并想检查以下方法的优缺点。
Trips:
Id -> this is a GUID generated by the API that is inserting data to dynamo
timestamp -> sortkey
//other details
UserTrips:
userId -> hashkey
tripId -> id from trips table
RecentTrips:
timeKey -> YYYYMM format hash key
tripId -> id from trips table
我担心这可能会造成很多不一致,就好像插入到用户行程或最近行程失败等。
【问题讨论】:
-
典型的解决方案是一个 GSI,其中 YYMMDD 作为分区键,时间戳作为排序键,然后您可以使用查询,但只能在给定的一天内使用。示例:stackoverflow.com/questions/35963243/…
-
我需要最近创建的N条记录,不应该受日期限制。
-
一般来说,您不能使用 NoSQL 数据库执行此操作。您可以设置分区键 YYYYMM 并获取当月最新的 N 条记录,但在新月第一天的凌晨它无法正常工作(您必须对最新的 N 条进行两次查询月和上个月的最新 N,并汇总结果 - 不难做到,但有点痛苦。另一种选择是在辅助表中保留某种索引,以指向通过 DynamoDB Streams 触发器维护的最新记录。
标签: amazon-web-services amazon-dynamodb dynamodb-queries