我是使用NoSQL数据库的新手.我在DynamoDB中有一个表,其中包含超过10万个项目.此外,此表经常刷新.在这张桌子上,我希望能够在关系数据库世界中做类似的事情:
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}.然后当您放置或更新主表时,您也会更新此字段,瞧,您有自己的价值.如果您的数据快速变化,请注意此方法带来的事务复杂性.
原文地址:https://codeday.me/bug/20190703/1368479.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。