如何按时间戳顺序获取DynamoDB记录



我有一个DynamoBD表,其中Partition键为id,Sort键为timestamp

我想获取timestamp==特定日期的记录,按升序排列。不幸的是,每条记录都有一个唯一的随机id,所以我不能使用timestamp作为排序键来对数据进行排序。

我正在考虑使用全球二级指数,但它不起作用。

我的全球二级指数:

  • 名称:时间戳索引
  • 分区键:时间戳
  • 排序键:无

我的查询:

options = {'IndexName': 'timestamp-index', 'FilterExpression': Attr('timestamp').contains(yesterday)}
scanner = table.scan(**options)

您有几个选项。好与坏取决于您的记录和查询量。如果将低查询量的好解决方案应用于高查询量,则可能会非常糟糕。

对于可扩展到大容量的解决方案,请查看文档中时间序列数据的设计模式。

这种多表设计以复杂性为代价来购买可扩展性。如果缩放不是一个大问题并且查询相对较少,您可以使用GSI:进行单表设计

GSI1PK (Date)       GSI1SK (Time)
2021-11-29          02:00:19.000
2021-11-29          05:11:33.000
2021-11-29          12:57:19.000
2021-11-30          03:33:41.000
2021-11-30          13:33:41.000
2021-11-30          20:33:41.000

您可以使用GSI1PK="2021-11-30" AND GSI1SK>""查询您的二级索引,以获取11月30日的所有记录。将时间作为GSI SK可以选择按小时查询:AND GSI1SK begins_with("12")

默认情况下,query排序顺序为升序。要反转顺序,请将ScanIndexForward参数设置为false。我认为scan排序顺序是未定义的。

最新更新