Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Amazon DynamoDB中的MAX操作_Java_Database_Performance_Nosql_Amazon Dynamodb - Fatal编程技术网

Java Amazon DynamoDB中的MAX操作

Java Amazon DynamoDB中的MAX操作,java,database,performance,nosql,amazon-dynamodb,Java,Database,Performance,Nosql,Amazon Dynamodb,我不熟悉使用NoSQL数据库。我在DynamoDB有一张桌子,里面有超过10万件物品。此外,此表经常刷新。在此表中,我希望能够在关系数据库世界中执行类似的操作: Select * from tableName where attributeName = (Select MAX(attributeName) from tableName); 有没有一种不需要将所有行提取到Java代码中的廉价方法?任何输入/指针将不胜感激。谢谢。在不增加空间或复杂性的情况下,没有廉价的方法可以做到这一点 代价

我不熟悉使用NoSQL数据库。我在DynamoDB有一张桌子,里面有超过10万件物品。此外,此表经常刷新。在此表中,我希望能够在关系数据库世界中执行类似的操作:

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

有没有一种不需要将所有行提取到Java代码中的廉价方法?任何输入/指针将不胜感激。谢谢。

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

代价高昂的方法是扫描整个表,仅检索键属性和
attributeName
属性,计算最大值,然后获取使用该最大值找到的所有(完整)项

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


如果您愿意增加复杂性,可以将此信息存储在其他表中。类似于
tableName.extraInfo
,它有这样一个项:
{hashKey:“maxOfAttributeName”,“value”:5}
。然后,当您
放置
更新
主表时,您也会更新此字段,瞧,您有了自己的值。如果您的数据变化迅速,请注意此方法带来的事务复杂性。

请注意,此答案可能不再正确。DynamoDB已经发布了本地二级索引。