Amazon web services AWS DynamoDB查询和排序
一个社交媒体应用程序,人们可以在其中留言。帖子由作者、时间戳、主题和正文组成。 帖子存储在DynamoDB中,Author作为分区键,TimeStamp作为排序键 如何查询今天的所有帖子?我希望返回的结果按时间戳排序,所以扫描DynamoDB不是一个选项Amazon web services AWS DynamoDB查询和排序,amazon-web-services,nosql,amazon-dynamodb,Amazon Web Services,Nosql,Amazon Dynamodb,一个社交媒体应用程序,人们可以在其中留言。帖子由作者、时间戳、主题和正文组成。 帖子存储在DynamoDB中,Author作为分区键,TimeStamp作为排序键 如何查询今天的所有帖子?我希望返回的结果按时间戳排序,所以扫描DynamoDB不是一个选项 查询操作根据主键值查找项。所以我必须定义一个全局二级索引。但是我找不到一个合适的选项来检索今天的所有帖子。这里的最佳选择是什么?您可以添加一个表示天数的属性(您的GSI主键),并将时间戳属性设置为GSI排序键 例如: | AuthorId
查询操作根据主键值查找项。所以我必须定义一个全局二级索引。但是我找不到一个合适的选项来检索今天的所有帖子。这里的最佳选择是什么?您可以添加一个表示天数的属性(您的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 |
在此表中,通过使用排序键条件(如以
开头),您可以查询本月、第10天至第15天或10小时至12小时之间的特定日期等所有项目
例如,对于过去13天的查询,SortKey条件将是开始于(2018:08:04:)
,而过去一小时的查询类似于开始于(2018:08:17:10:)
这种方法引入了热分区密钥问题。查看模型,了解更多有关此方法的信息以及如何处理此方法的信息假设您有如下表格:
资源:
资源:
历史记录:
类型:“AWS::DynamoDB::Table”
删除策略:保留
特性:
TableName:${self:provider.environment.DYNAMODB_BOT_CHAT_HISTORY_TABLE_NAME}
属性定义:
-AttributeName:messageId
属性类型:S
-AttributeName:userId
属性类型:S
-AttributeName:createdDate
属性类型:S
KeySchema:
-AttributeName:messageId
关键字类型:哈希
计费模式:按请求付费
全球次级指数:
-IndexName:${self:provider.environment.DYNAMODB_BOT_CHAT_HISTORY_TABLE_GSI_1}
KeySchema:
-AttributeName:userId
关键字类型:哈希
-AttributeName:createdDate
键类型:范围
投影:
ProjectionType:ALL
好的,所以最好事先考虑好您的设计。因为如果我现在决定显示上周的帖子,我必须添加一个WeekAttribute并将其作为我的分区键?我更新了答案。看一看。我猜它和你要找的东西很相似?那正是我要找的!KeyType:范围,可用于排序