AWS DynamoDB查询和排序

Xtra

人们可以在其中发布帖子的社交媒体应用。帖子由作者,时间戳,主题和正文组成。这些帖子存储在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章