社交媒体应用,人们可以留下帖子 . 帖子由作者,TimeStamp,Subject和Body组成 . 这些帖子存储在DynamoDB中,作为分区键,TimeStamp作为排序键 .
如何查询今天的所有帖子?我希望返回的结果按TimeStamp排序,因此扫描DynamoDB不是一个选项 .
Query操作根据主键值查找项目 . 所以我必须定义一个全局二级索引 . 但我找不到合适的选项来检索今天的所有帖子 . 这里有什么好的选择?
您可以添加用于表示日期的属性(您的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小时之间的特定日期等等 .
begins_with
例如,在过去13天中,查询SortKey条件为 begins_with(2018:08:04:) ,过去一小时查询类似于 begins_with(2018:08:17:10:) .
begins_with(2018:08:04:)
begins_with(2018:08:17:10:)
这种方法引入了热分区密钥问题 . 看看Time Series Data模型,了解更多关于这种方法以及如何处理它的方法
1 回答
您可以添加用于表示日期的属性(您的GSI主键),并将时间戳属性设置为GSI排序键
例:
查询GSI时,它将按时间排序 .
Edit on your comment:
添加属性来满足您的查询需求并不是一个好方法 . 在这种情况下,我可以建议分层使用排序键 .
这意味着将您最相关的查询组合在一个GSI密钥中,并使用分层排序键 . 让我们说你想查询只有几个月,几天,几小时,几分钟的分段..
这将是表格
在此表中,通过使用
begins_with
之类的排序键条件,您可以查询本月,或10到15天之间的所有项目,或10到12小时之间的特定日期等等 .例如,在过去13天中,查询SortKey条件为
begins_with(2018:08:04:)
,过去一小时查询类似于begins_with(2018:08:17:10:)
.这种方法引入了热分区密钥问题 . 看看Time Series Data模型,了解更多关于这种方法以及如何处理它的方法