为啥 Cassandra 内部不支持聚合?
Posted
技术标签:
【中文标题】为啥 Cassandra 内部不支持聚合?【英文标题】:Why Cassandra not support aggregation internally?为什么 Cassandra 内部不支持聚合? 【发布时间】:2018-10-09 06:44:46 【问题描述】:在许多书籍和文章中考虑到这句话:
在列式架构中,寻求聚合特定列的值的查询会得到优化,因为要聚合的所有值都存在于相同的磁盘块中。而Cassandra是列族NoSQL数据库。
如果这句话是真的,为什么Cassandra内部不支持聚合函数呢?还是我误解了这句话或概念?
【问题讨论】:
【参考方案1】:为什么 Cassandra 内部不支持聚合函数
Cassandra 确实支持每个请求聚合函数(在 java、python、javascript 和一些预制函数中自定义),当在单个分区上使用时,这些函数在限制范围内工作。请记住,此查询实际上旨在在几毫秒内得到答复,因此如果经常查询,计算一百万个值的平均值的东西将无法正常工作。
聚合不能轻易地更新为删除(在分布式环境中尤其困难,因为删除甚至可能在所有节点上都看不到 - 请记住 Cassandra 是 AP 而不是 CP)并且 ttl'd 数据过期,因此整个集合to aggregate 必须重新计算并从一致性级别发送到 coordinator 进行计算。因此,虽然分区的数据在一定数量的 sstables 中按顺序保存在磁盘上并且可以非常有效地合并,但它在协调器上仍然很昂贵,并且如果在一个范围内完成传输和计算的数据量最终可能会失败(超时)很容易。
【讨论】:
【参考方案2】:Cassandra 是一个行存储引擎。如果要获取与特定列值匹配的所有记录,则需要对表进行全扫描。
看到这个other question。
【讨论】:
以上是关于为啥 Cassandra 内部不支持聚合?的主要内容,如果未能解决你的问题,请参考以下文章
Cassandra 是不是支持聚合功能或 Map Reduce 等任何其他功能?