首页 文章

AWS DynamoDB查询和排序

提问于
浏览
1

社交媒体应用,人们可以留下帖子 . 帖子由作者,TimeStamp,Subject和Body组成 . 这些帖子存储在DynamoDB中,作为分区键,TimeStamp作为排序键 .

如何查询今天的所有帖子?我希望返回的结果按TimeStamp排序,因此扫描DynamoDB不是一个选项 .

Query操作根据主键值查找项目 . 所以我必须定义一个全局二级索引 . 但我找不到合适的选项来检索今天的所有帖子 . 这里有什么好的选择?

1 回答

  • 1

    您可以添加用于表示日期的属性(您的GSI主键),并将时间戳属性设置为GSI排序键

    例:

    |   AuthorId  | Timestamp(GSI SK) | DayAttribute (GSI PK) |
    |:-----------:|------------------:|:---------------------:|
    | authord_id  |    1534522921     |     2018-08-17        |    
    | authord_id2 |    1534522922     |     2018-08-17        |    
    | authord_id3 |    1534522923     |     2018-08-18        |
    

    查询GSI时,它将按时间排序 .

    Edit on your comment:

    添加属性来满足您的查询需求并不是一个好方法 . 在这种情况下,我可以建议分层使用排序键 .

    这意味着将您最相关的查询组合在一个GSI密钥中,并使用分层排序键 . 让我们说你想查询只有几个月,几天,几小时,几分钟的分段..

    这将是表格

    |   AuthorId  |      Timestamp(GSI SK)      |   MonthAttr (GSI PK)  |
    |:-----------:|----------------------------:|:---------------------:|
    | authord_id  |    2018:08:17::10:03:25     |       2018-08         |    
    | authord_id  |    2018:08:17::10:03:25     |       2018-08         |    
    | authord_id  |    2018:08:18::10:03:25     |       2018-08         |
    

    在此表中,通过使用 begins_with 之类的排序键条件,您可以查询本月,或10到15天之间的所有项目,或10到12小时之间的特定日期等等 .

    例如,在过去13天中,查询SortKey条件为 begins_with(2018:08:04:) ,过去一小时查询类似于 begins_with(2018:08:17:10:) .

    这种方法引入了热分区密钥问题 . 看看Time Series Data模型,了解更多关于这种方法以及如何处理它的方法

相关问题