gpt4 book ai didi

java - Amazon DynamoDB 中的 MAX 操作

转载 作者:搜寻专家 更新时间:2023-11-01 03:24:33 24 4
gpt4 key购买 nike

我刚开始使用 NoSQL 数据库。我在 DynamoDB 中有一个表,其中包含超过 100k 个项目。此外,此表会经常刷新。在这张表上,我希望能够在关系数据库世界中做类似的事情:

Select * 
from tableName
where attributeName = (Select MAX(attributeName) from tableName);

有没有什么便宜的方法可以做到这一点而不必将所有行提取到我的 Java 代码中?任何输入/指针将不胜感激。谢谢。

最佳答案

在不增加空间或复杂性的情况下,没有便宜的方法可以做到这一点。

昂贵的方法是扫描整个表,仅检索关键属性和 attributeName 属性,计算最大值,然后获取您找到的所有(完整)项目最大。

如果您有一个复合键(散列和范围)和几个散列键相对于表中的总项目,Local secondary indexes会有所帮助,而且只需要一点点空间。您可以在 attributeName 属性上有一个索引,然后使用该索引查询每个散列键,并使用“isScanIndexForward:false”和“limit:1”从该 hashKey 中获取“max” .然后计算所有结果的最大值(每个哈希键有 1 个结果),并且您知道要检索的值。您可以用几乎相同的方式检索它们,在 attributeName 上使用向后扫描和“EQ”条件。

如果您愿意增加复杂性,您可以将此信息存储在一个额外的表中。像 tableName.extraInfo 这样的东西,它有一个像这样的项目:{hashKey: "maxOfAttributeName", "value":5}。然后,当您 putupdate 主表时,您也更新了这个字段,瞧,您有了您的值。如果您的数据变化很快,请注意这种方法带来的事务复杂性。

关于java - Amazon DynamoDB 中的 MAX 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18219562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com