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

Node.js 如何在Amazon Dynamodb中使用聚合函数,node.js,amazon-dynamodb,Node.js,Amazon Dynamodb,我是dynamodb的新手,我在dynamodb有一张桌子,里面有超过10万个项目。此外,此表经常刷新。在这个表中,我希望能够在关系数据库世界中执行类似的操作:如何从表中获取最大值。DynamoDB是一个NoSQL数据库,因此在如何查询数据方面非常有限。通过直接调用dynamodbapi,无法从表中执行诸如max value之类的聚合。你必须寻找不同的工具和方法来解决这个问题 您可以考虑以下几种可能的解决方案: 执行表格扫描 由于您的表中有超过10万个项目,这可能是一个非常糟糕的主意。表扫描将读

我是dynamodb的新手,我在dynamodb有一张桌子,里面有超过10万个项目。此外,此表经常刷新。在这个表中,我希望能够在关系数据库世界中执行类似的操作:如何从表中获取最大值。

DynamoDB是一个NoSQL数据库,因此在如何查询数据方面非常有限。通过直接调用dynamodbapi,无法从表中执行诸如max value之类的聚合。你必须寻找不同的工具和方法来解决这个问题

您可以考虑以下几种可能的解决方案:

执行表格扫描

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

DynamoDB中的物化索引

根据您的用例,您可以使用DynamoDB流和Lambda函数在单独的DynamoDB表中维护索引。如果您的表是只写、不更新和不删除的,则可以将最大值存储在单独的表中,并在插入新记录时比较它们并执行必要的更新

这种方法在某些约束条件下是可行的,但不是一种广义的解决方案

使用Amazon红移执行分析

DynamoDB并不意味着要进行诸如MAX之类的分析操作,而Redshift是一个非常强大的大数据平台,可以轻松地执行这些类型的计算。与DynamoDB索引类似,在插入记录时,可以使用DynamoDB流将数据发送到Redshift中,以维护表的近实时副本,以便进行分析

如果您正在寻找更多的离线或分析解决方案,这是一个不错的选择

使用Elasticsearch执行分析

虽然DynamoDB是一个强大的NoSQL解决方案,在数据持久性方面有很强的保证,但Elasticsearch提供了一种非常灵活的查询方法,允许进行诸如maximum之类的查询,并且这些聚合可以在任何属性值上实时切片。与上述解决方案类似,您可以使用DynamoDB streams将记录插入、更新和删除实时发送到Elasticsearch索引中

如果您想继续使用DynamoDB,但需要一些额外的查询功能,这确实是一个不错的选择,尤其是在使用AWS ES服务时,它将为您完全管理Elasticsearch集群。重要的是要记住Elasticsearch并没有取代您的DynamoDB表,它只是相同数据的一个易于搜索的索引

只需使用SQL数据库

显而易见的解决方案是,如果您有SQL需求,那么就从基于NoSQL的系统转移到基于SQL的系统。AWS的RDS产品提供了一个托管解决方案。虽然DynamoDB提供了很多好处,但如果您的用例将您拉向一个SQL解决方案,那么最容易做的事情可能是不与之抗争,而只是更改解决方案


这并不是说基于SQL的解决方案或基于NoSQL的解决方案是更好的,每一个都有优点和缺点,并且基于特定的用例而变化,但它绝对是一个可供选择的选项。

< P> DaMaDoDB实际上有一个最大聚合函数:

这是通过Amazon EMR集群连接到DyDoDB而获得的;它不是DynamoDB本身提供的功能。如果您不反对使用连接到DynamoDB流的辅助服务进行聚合查询,则存在一个问题。