【问题标题】:How to get DynamoDB records in timestamp order如何按时间戳顺序获取 DynamoDB 记录
【发布时间】:2022-01-06 06:36:51
【问题描述】:

我有一个 DynamoBD 表,其分区键为 id,排序键为 timestamp

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

我正在考虑使用全局二级索引,但它不起作用。

我的全局二级索引:

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

我的查询:

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

scanner = table.scan(**options)

【问题讨论】:

    标签: python aws-lambda boto3 amazon-dynamodb


    【解决方案1】:

    您有多种选择。哪个好哪个坏取决于您的record and query volumes。如果应用于高查询量,那么低查询量的良好解决方案可能会非常糟糕。

    有关可扩展到大容量的解决方案,请查看文档中的 design patterns for time series data

    多表设计以复杂性为代价换取了可扩展性。如果缩放不是一个大问题 并且您的查询相对较少,您可能会使用 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 参数设置为falsescan 我相信排序顺序是未定义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      相关资源
      最近更新 更多