当前位置: 首页 > 知识库问答 >
问题:

为什么DynamoDB LastEvalue atedKey取决于查询的限制?

能可人
2023-03-14

使用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

那么这里到底发生了什么?

共有2个答案

巫马淳
2023-03-14

事实上,根据文件,我发现这是一个预期的结果

最后评估的密钥

...

如果LastEvaluatedKey不为空,则不一定意味着结果集中有更多数据。知道何时到达结果集末尾的唯一方法是LastEvaluatedKey何时为空。

...

刘弘济
2023-03-14

你所看到的是预期的。

这种说法是正确的:

如果结果中没有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

  • 问题内容: SQL标准是否为多表查询指定锁定顺序? 例如,给定: SQL标准是保证锁定顺序还是由(特定于实现的)执行计划确定? 有没有办法保证锁定顺序? 如果没有办法保证锁定顺序,我们应该如何防止死锁? 更新 :在未解释您的推理之前,请不要投票结束该问题。就我而言,这是一个编程问题,这使Stackoverflow变得非常重要。如果您认为这个问题需要进一步完善,请解释一下,我们非常乐意为您解答。 问

  • 问题内容: 我有一个大型数据库,其中包含有标签的记录,我想删除它们。当然,有一种方法可以创建一个全选,使用和更新数据库的PHP脚本,但这需要很长时间。那么,如何使用简单(或复杂)的MySQL查询来做到这一点? 问题答案: 我不相信仅在MySQL中有任何有效的方法可以做到这一点。 MySQL确实有一个功能,但是它只能替换常量字符串,不能替换模式。您可能会编写一个MySQL存储函数来搜索和替换标签,但

  • 问题内容: 我有这个查询: 内部查询运行得非常快(不到0.1秒),以获取两个ID,一个ID表示状态1,一个ID表示状态2,然后它根据主键进行选择,以便对其进行索引。说明查询说,它仅使用where搜索135k行,我一生都无法弄清楚为什么这么慢。 问题答案:

  • 问题内容: 我发现真正令人困惑的是,为什么AJAX请求限于同一域?这背后的原因是什么? 我从外部位置请求文件没有任何问题,发出XMLHTTP请求的服务器似乎也可以很好地发送和发布到外部位置。 问题答案: 图片如下: 您来到我神话般的网站www.halfnakedgirls.com。您很乐意观看看起来像人类生理学的技术文档,但是在您的背后,一些JavaScript行正在向另一个域执行某些请求,比如说