【问题标题】:MAX operations in Amazon DynamoDBAmazon DynamoDB 中的 MAX 操作
【发布时间】:2013-08-13 21:29:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: java database performance nosql amazon-dynamodb


    【解决方案1】:

    没有不增加空间或复杂性的廉价方法。

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

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

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

    【讨论】:

    • 请注意,此答案可能不再正确。 DynamoDB 此后发布了本地二级索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    相关资源
    最近更新 更多