Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS DynamoDB查询和排序_Amazon Web Services_Nosql_Amazon Dynamodb - Fatal编程技术网

Amazon web services AWS 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

一个社交媒体应用程序,人们可以在其中留言。帖子由作者、时间戳、主题和正文组成。 帖子存储在DynamoDB中,Author作为分区键,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         |    
在此表中,通过使用排序键条件(如
开头),您可以查询本月、第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:范围,可用于排序