Amazon DynamoDB中的MAX操作

时间:2013-08-13 21:29:30

标签: java database performance nosql amazon-dynamodb

我是使用NoSQL数据库的新手。我在DynamoDB中有一个表,其中包含超过10万个项目。此外,此表经常刷新。在这张桌子上,我希望能够在关系数据库世界中做类似的事情:

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

有没有任何廉价的方法可以做到这一点,而无需将所有行都提取到我的Java代码中?任何输入/指针将不胜感激。感谢。

1 个答案:

答案 0 :(得分:2)

没有增加空间或复杂性,没有廉价的方法可以做到这一点。

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

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

如果您愿意添加复杂性,可以将此信息存储在附加表中。类似于tableName.extraInfo的内容,其中包含以下内容:{hashKey: "maxOfAttributeName", "value":5}。然后,当您在主表putupdate处更新此字段时,瞧,您就有了自己的价值。如果您的数据快速变化,请注意此方法带来的事务复杂性。