使用javascript aws sdk和查询dynamodb表,以及文档客户端。该表包含10个元素,查询限制=5。
对于每个请求,我使用LastEvaluatedKey构建一个新查询并发送一个新请求,结果如下:
first request --> {Items: Array(5), Count: 5, ScannedCount: 5, LastEvaluatedKey: {…}}
second request --> {Items: Array(5), Count: 5, ScannedCount: 5, LastEvaluatedKey: {…}}
third request --> {Items: Array(0), Count: 0, ScannedCount: 0}
根据这份文件
如果结果包含LastEvaluatedKey元素,请转至步骤2。如果结果中没有LastEvaluatedKey,则没有其他要检索的项
它应该不会在第二个请求中返回LastEvaluatedKey,因为没有更多的元素,但它会在第三个请求中返回一个发送到空结果的元素。
当我尝试使用limit=4时,一切都按预期进行
first request --> {Items: Array(4), Count: 4, ScannedCount: 4, LastEvaluatedKey: {…}}
second request --> {Items: Array(4), Count: 4, ScannedCount: 4, LastEvaluatedKey: {…}}
third request --> {Items: Array(2), Count: 2, ScannedCount: 2} <--- there is no LastEvaluatedKey as expected
那么这里到底发生了什么?
事实上,根据文件,我发现这是一个预期的结果
最后评估的密钥
...
如果LastEvaluatedKey不为空,则不一定意味着结果集中有更多数据。知道何时到达结果集末尾的唯一方法是LastEvaluatedKey何时为空。
...
你所看到的是预期的。
这种说法是正确的:
如果结果中没有LastEvaluatedKey,则没有其他要检索的项
然而,你似乎假设它暗示逆条件也是真的,但它不是...
如果没有更多要检索的项,则结果中没有LastEvaluatedKey#false
第一个语句没有暗示这一点,它在逻辑上是不等价的,并且不是真的。
如果服务准确地达到了您的限制,那么它不知道是否有更多匹配的记录要查找,因此它会给您评估的最后一条记录,以便您可以在下一个请求上继续搜索。可能有更多,也可能没有。这是必要的优化的必然结果,以便尽快将结果返回给您。否则,服务将需要继续寻找至少一个匹配项,即使它已经找到足够的匹配项来满足您的限制。
如果搜索结束时也没有达到您的限制,则它知道没有更多可搜索的内容,因此不会返回LastEvaluatedKey
。
问题内容: 我有一个查询,在我认为可能不使用索引的情况下,出于好奇,我将其重现: 创建一个具有1.000.000行(在中有10个不同的值,在中有500个字节的数据)的。 创建一个索引并收集表统计信息: 尝试获取和的不同值: 不使用索引,前提是提示不会更改。 我想在这种情况下不能使用索引,但是为什么呢? 问题答案: 我运行了Peter的原始内容并复制了他的结果。然后我应用了dcp的建议… 之所以如此
因此,使用此存储库,我在运行应用程序时遇到了一些错误: 无法解析属性:com的名称。Santanderevweek。训练营。模型股票[从com.santanderdevweek.bootcamp.model.Stock Stock中选择股票,其中Stock.name=:name和Stock.date=:date和Stock.id!=:id] 无法解析属性:com的名称。Santanderevwee
问题内容: 我有一个大型数据库,其中包含有标签的记录,我想删除它们。当然,有一种方法可以创建一个全选,使用和更新数据库的PHP脚本,但这需要很长时间。那么,如何使用简单(或复杂)的MySQL查询来做到这一点? 问题答案: 我不相信仅在MySQL中有任何有效的方法可以做到这一点。 MySQL确实有一个功能,但是它只能替换常量字符串,不能替换模式。您可能会编写一个MySQL存储函数来搜索和替换标签,但
问题内容: SQL标准是否为多表查询指定锁定顺序? 例如,给定: SQL标准是保证锁定顺序还是由(特定于实现的)执行计划确定? 有没有办法保证锁定顺序? 如果没有办法保证锁定顺序,我们应该如何防止死锁? 更新 :在未解释您的推理之前,请不要投票结束该问题。就我而言,这是一个编程问题,这使Stackoverflow变得非常重要。如果您认为这个问题需要进一步完善,请解释一下,我们非常乐意为您解答。 问
问题内容: 我有这个查询: 内部查询运行得非常快(不到0.1秒),以获取两个ID,一个ID表示状态1,一个ID表示状态2,然后它根据主键进行选择,以便对其进行索引。说明查询说,它仅使用where搜索135k行,我一生都无法弄清楚为什么这么慢。 问题答案:
我有两张这样的桌子: 我需要根据一些标准获取CHANGESET记录列表,并且只加入一个DECISION记录,最后一个基于dateTimeStamp。 所以,我有一个这样的查询: 或者,我可以使用以下查询获得相同的结果: 我需要的是用QueryDSL编写它。我尝试了这样的方法: 并加入到: 但它根本不起作用,因为或不基于