如何在Amazon Dynamodb中使用聚合函数

我是dynamodb的新手,我在DynamoDB中有一个表,里面有超过10万个项目。 而且,这个表经常刷新。 在这个表上,我希望能够在关系数据库世界中做类似于这个的事情:我如何从表中获得最大值。

DynamoDB是NoSQL数据库,因此在查询数据方面非常有限。 通过直接调用DynamoDB API,无法从表中执行聚合,例如最大值。 你将不得不寻找不同的工具和方法来解决这个问题。

您可以考虑一些可能的解决scheme:

执行表扫描

在桌面上有超过10万个项目,这可能是一个非常糟糕的主意。 表扫描将读取每个项目,您可以让应用程序端逻辑识别最大值。 这真的不是一个可行的解决scheme。

DynamoDB中的物化索引

根据您的使用情况,您可以使用DynamoDBstream和Lambda函数在单独的DynamoDB表中维护索引。 如果你的表是只写的,没有更新和没有删除,你可以将最大值存储在一个单独的表中,当新logging被插入时,你可以比较它们并执行必要的更新。

这种方法在一些有限的情况下是可行的,但不是一个通用的解决scheme。

使用Amazon Redshift执行分析

DynamoDB并不是要进行分析操作,如最大化,而Redshift是一个非常强大的大数据平台,可以轻松执行这些types的计算。 与DynamoDB索引类似,您可以使用DynamoDBstream将数据发送到Redshift中,以便插入logging以维护表的近实时副本以用于分析目的。

如果您正在寻找更多的离线或分析解决scheme,这是一个不错的select。

使用Elasticsearch执行分析

虽然DynamoDB是一个function强大的NoSQL解决scheme,对数据持久性提供了强有力的保证,但Elasticsearch提供了一种非常灵活的查询方法,允许查询(如最大值),这些聚合可以在任何属性值上实时切片和切块。 与上述解决scheme类似,您可以使用DynamoDBstream实时将logging插入更新和删除发送到Elasticsearch索引。

如果您想要坚持使用DynamoDB,但需要一些额外的查询function,那么这是一个非常好的select,尤其是在使用AWS ES服务时,它将完全为您pipe理Elasticsearch群集。 请记住,Elasticsearch不会替代您的DynamoDB表,它只是一个容易search的相同数据的索引。

只需使用一个SQL数据库

显而易见的解决scheme是,如果您有SQL要求,则从基于NoSQL的系统转移到基于SQL的系统。 AWS的RDS产品提供了一个可pipe理的解决scheme。 虽然DynamoDB提供了很多好处,但是如果您的用例将您引向SQL解决scheme,最简单的方法就是不要与之对抗,只需更改解决scheme。

这并不是说基于SQL的解决scheme或者基于NoSQL的解决scheme更好,对每个解决scheme都有利弊,根据具体的用例而有所不同,但这绝对是一个可供select的select。

DynamoDB实际上有一个MAX聚合函数: http ://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.Querying.html