为什么 DynamoDB 不支持简单聚合?
Why doesn't DynamoDB support simple aggregations?
为什么 DynamoDB 不像 mongoDB 那样支持简单聚合?
根据我公认的对 NoSQL 数据库的有限了解,我认为在 NoSQL DB 中进行聚合比在传统 RDS 中进行聚合要高效得多,因为这些数据库具有分布式特性。
当然,通过主分片进行最终聚合,对小块数据并行执行聚合效率更高。而不是在一台机器上对整个数据集执行操作的 RDS
我知道您仍然可以在客户端执行聚合。但感觉效率要低得多,对于大型数据集,您可能会将大量不必要的数据发送回客户端
那么为什么 dynamoDB 不支持简单聚合呢?我在这里错过了什么吗?这些操作实际上更适合 RDS 吗?
编辑
需要说明的是,我知道 table 联接在分布式数据库中会变得更成问题。但据我所知,同样的问题不适用于聚合
例如,在下面的查询中,我们加入了用户 table 和电子邮件 table。如果所有数据都在一个节点上,这个查询会更有效率,因为我们不需要从一个节点开始获取用户并检查我们是否可以将他们加入另一个节点上的电子邮件
SELECT * FROM users u INNER JOIN emails e ON u.user_id = e.user_id
但是,在下面的聚合查询中,数据可能分布在数百个节点上。可以在所有节点上高效地处理查询,然后最终结果基本上是子查询的总和。本质上,这就是 map reduce 范式背后的想法
SELECT AVG(age) FROM users GROUP BY nationality
回答我自己的问题-
DynamoDB 聚合
AWS 希望您使用 DynamoDB 流来持续计算您要使用的聚合指标。 link
本质上,他们希望您为所需的每个聚合指标创建一个单独的 table,然后在每次记录为 created/updated/deleted 时更新 table
他们声称这种方法比 mongoDB 聚合管道的扩展性要好得多。我想这是有道理的,因为 DynamoDB 是为非常高的读写吞吐量而设计的。如果您有大量的读取,每次都进行聚合,事情将很快开始变得拥挤。
另外,DynamoDB 不是为临时查询而设计的。因此,您必须计划您将需要的聚合并保持这些聚合的最新 table 这一事实只会迫使您按照设计使用的方式使用 DynamoDB。也就是说,您的数据应该按照将要被访问的方式进行调整。 DynamoDB 大师的非常有趣的演讲 here 解释了所有这些
Hive 聚合
- 您也可以使用 Apache Hive 查询 DynamoDB。 Hive 允许您使用 SQL 之类的查询,包括聚合。聚合仍将在客户端进行。然而,它使用 hadoop 集群跨多台机器以小块的形式处理这些查询,这可以使更大的查询更快。唯一需要注意的是您消耗的读写容量
Integrating DynamDB with Apache Hive
为什么 DynamoDB 不像 mongoDB 那样支持简单聚合?
根据我公认的对 NoSQL 数据库的有限了解,我认为在 NoSQL DB 中进行聚合比在传统 RDS 中进行聚合要高效得多,因为这些数据库具有分布式特性。
当然,通过主分片进行最终聚合,对小块数据并行执行聚合效率更高。而不是在一台机器上对整个数据集执行操作的 RDS
我知道您仍然可以在客户端执行聚合。但感觉效率要低得多,对于大型数据集,您可能会将大量不必要的数据发送回客户端
那么为什么 dynamoDB 不支持简单聚合呢?我在这里错过了什么吗?这些操作实际上更适合 RDS 吗?
编辑
需要说明的是,我知道 table 联接在分布式数据库中会变得更成问题。但据我所知,同样的问题不适用于聚合
例如,在下面的查询中,我们加入了用户 table 和电子邮件 table。如果所有数据都在一个节点上,这个查询会更有效率,因为我们不需要从一个节点开始获取用户并检查我们是否可以将他们加入另一个节点上的电子邮件
SELECT * FROM users u INNER JOIN emails e ON u.user_id = e.user_id
但是,在下面的聚合查询中,数据可能分布在数百个节点上。可以在所有节点上高效地处理查询,然后最终结果基本上是子查询的总和。本质上,这就是 map reduce 范式背后的想法
SELECT AVG(age) FROM users GROUP BY nationality
回答我自己的问题-
DynamoDB 聚合
AWS 希望您使用 DynamoDB 流来持续计算您要使用的聚合指标。 link
本质上,他们希望您为所需的每个聚合指标创建一个单独的 table,然后在每次记录为 created/updated/deleted 时更新 table
他们声称这种方法比 mongoDB 聚合管道的扩展性要好得多。我想这是有道理的,因为 DynamoDB 是为非常高的读写吞吐量而设计的。如果您有大量的读取,每次都进行聚合,事情将很快开始变得拥挤。
另外,DynamoDB 不是为临时查询而设计的。因此,您必须计划您将需要的聚合并保持这些聚合的最新 table 这一事实只会迫使您按照设计使用的方式使用 DynamoDB。也就是说,您的数据应该按照将要被访问的方式进行调整。 DynamoDB 大师的非常有趣的演讲 here 解释了所有这些
Hive 聚合
- 您也可以使用 Apache Hive 查询 DynamoDB。 Hive 允许您使用 SQL 之类的查询,包括聚合。聚合仍将在客户端进行。然而,它使用 hadoop 集群跨多台机器以小块的形式处理这些查询,这可以使更大的查询更快。唯一需要注意的是您消耗的读写容量 Integrating DynamDB with Apache Hive