为什么DynamoDB不像mongoDB支持简单聚合那样支持简单聚合?
从我对NoSQL数据库的有限了解来看,我认为在NoSQL DB中进行聚合比在传统RDS中进行聚合要有效得多,因为这些数据库具有分布式特性。
使用主分片进行最终聚合,对小块数据并行执行聚合肯定会更有效。而不是在一台机器上对整个数据集执行操作的RDS
我了解您仍然可以在客户端执行聚合。但是感觉效率要低得多,对于大型数据集,您可能会将大量不必要的数据发送回客户端
那么dynamoDB为什么不支持简单聚合?我在这里想念什么吗?这些操作实际上更适合RDS吗?
需要明确的是,我知道在分布式数据库中表联接的问题变得更加严重。但据我所知,相同的问题不适用于聚合
例如,在下面的查询中,我们将users表与emails表连接在一起。如果所有数据都在一个节点上,则此查询效率更高,因为我们无需开始从一个节点上获取用户并检查是否可以将他们加入到另一节点上的电子邮件中
SELECT * FROM users u INNER JOIN emails e ON u.user_id = e.user_id
但是,在下面的聚合查询中,数据可以分布在数百个节点上。可以在所有节点上有效地处理查询,然后最终结果本质上将是子查询的总和。本质上,这就是地图简化范例背后的想法
SELECT AVG(age) FROM users GROUP BY nationality
答案 0 :(得分:0)
回答我自己的问题-
AWS希望您使用DynamoDB流来连续计算要使用的聚合指标。 link
从本质上讲,他们希望您为所需的每个聚合指标创建一个单独的表,然后在每次创建/更新/删除记录时都对该表进行更新
他们声称这种方法的扩展性比mongoDB聚合管道好得多。我猜这是有道理的,因为DynamoDB专为实现很高的读写吞吐量而设计。如果您每次都进行大量读操作,则将很快陷入阻塞。
此外,DynamoDB也不适合临时查询。因此,您必须计划所需的聚合并保留这些聚合的最新表这一事实,仅迫使您以设计使用的方式使用DynamoDB。即您的数据应以将要访问的方式进行调整。 DynamoDB专家here进行的非常有趣的演讲,解释了所有这些内容