Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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 dynamodb DyanmoDB显示Item Count=0、未填充且未在Appsync查询中工作_Amazon Dynamodb_Aws Appsync - Fatal编程技术网

Amazon dynamodb DyanmoDB显示Item Count=0、未填充且未在Appsync查询中工作

Amazon dynamodb DyanmoDB显示Item Count=0、未填充且未在Appsync查询中工作,amazon-dynamodb,aws-appsync,Amazon Dynamodb,Aws Appsync,为了对结果进行排序,我在DynamoDB表中添加了一个索引,但它似乎没有做任何事情。在DyanmoDB仪表板中,它显示为0大小和0项目计数 表中有几百个项目,它们都有一个id(主键)和一个创建的值。创建表时,我没有设置范围属性。下图中的项目顺序正确,但通过appsync的响应不正确 我已将索引添加到查询中,该查询返回所有项目,但它似乎没有任何作用,无论是否使用索引,项目的顺序都是相同的: "version" : "2017-02-28", "operation" : "Scan", "ind

为了对结果进行排序,我在DynamoDB表中添加了一个索引,但它似乎没有做任何事情。在DyanmoDB仪表板中,它显示为0大小和0项目计数

表中有几百个项目,它们都有一个id(主键)和一个创建的值。创建表时,我没有设置范围属性。下图中的项目顺序正确,但通过appsync的响应不正确

我已将索引添加到查询中,该查询返回所有项目,但它似乎没有任何作用,无论是否使用索引,项目的顺序都是相同的:

"version" : "2017-02-28",
"operation" : "Scan",
"index" : "id-created-index",
"limit": $util.defaultIfNull(${ctx.args.limit}, 20),
"nextToken": $util.toJson($util.defaultIfNullOrBlank($ctx.args.nextToken, null))
我错过了什么?索引是否尚未建立,或者是否需要执行其他操作才能在查询中使用它

更新: 索引现在显示正确的项目计数,尽管它仍然没有对结果排序:


基本表的分区键为
id
,没有排序键。根据定义,这意味着表中的每个项目都有一个唯一的
id


GSI的分区键为
id
,排序键为
created
。数据按每个分区键内创建的属性排序。由于每个ID都是唯一的,所以排序键基本上不起任何作用

针对表或索引的扫描操作以随机顺序返回结果。为了对来自DynamoDB的结果进行排序,您需要运行一个查询操作,其中分区/哈希键是固定的,结果将根据排序键进行排序。但是,由于您的表/GSI总是有唯一的id,因此在单个分区(id)中没有其他记录


因此,是的,如果希望结果按
创建的
排序,则需要在表上设置一个固定属性作为索引的分区键。这里需要注意的是,索引中的所有记录都属于一个分区,这将是一个瓶颈。有几种方法可以解决这个问题;一种方法是查看是否有一种不同的访问模式,您可以在其中固定不同的属性以进行查询(即,
owner\u id
)。如果记录的数量足够少,在客户端进行过滤可能是最好的选择。

控制台中的大小和计数值不是实时的。每个控制台大约每6小时更新一次。这是你调查排序问题的一部分。我最初添加这个作为一个答案,但意识到它不是你实际问题的答案。你是对的,索引现在确实显示了501项计数。然而,这并没有改变索引没有对结果进行排序的事实。这就是为什么我把它作为一个答案删除,改为一个评论。我只是想确定你没有把这方面作为调查的一部分。让我仔细考虑一下排序问题,并尝试一些方法。您是否建议分区键不应该是唯一的?获得一组有序结果的唯一方法是使用一个对所有行都相同的分区键吗?在DynamoDB中,获得有序结果的唯一方法是使用排序键,而排序键只在分区内有效。对整个表使用单个分区键是个坏主意。正确的解决方案是在客户端进行排序。