人们可以在其中发布帖子的社交媒体应用。帖子由作者,时间戳,主题和正文组成。这些帖子存储在DynamoDB中,其中Author作为分区键,TimeStamp作为排序键。
我如何查询今天的所有帖子?我希望返回的结果在TimeStamp上排序,因此不能选择扫描DynamoDB。
查询操作基于主键值查找项目。因此,我必须定义一个全局二级索引。但是我找不到合适的选项来检索今天的所有帖子。这是什么好选择?
您可以添加一个表示日期的属性(您的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时,它将按时间排序。
编辑您的评论:
添加属性来满足查询需求不是一个好方法。在这种情况下,我可以建议使用分层键。
这意味着您可以将最相关的查询合并到一个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:)
。
这种方法引入了热分区密钥问题。查看“时间序列数据”模型,以了解有关此方法的更多信息以及如何处理它
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句