考虑到许多书籍和文章中的这句话:在列式体系结构中,由于要聚合的所有值都存在于同一磁盘块中,因此寻求聚合特定列的值的查询将得到优化。cassandra是一个列族nosql数据库。如果这句话是真的,为什么cassandra在内部不支持聚合函数?或者我误解了这个句子或概念?
mrfwxfqh1#
为什么cassandra在内部不支持聚合函数cassandra确实支持每请求聚合函数(java、python、javascript和一些预制函数中的自定义函数),当在单个分区上使用时,这些函数的工作范围是有限的。请记住,这种查询实际上是为了在几毫秒内得到响应而设计的,因此,如果经常查询,那么计算一百万个值的平均值的东西将无法正常工作。聚合不能很容易地作为删除保持最新(在分布式环境中尤其困难,因为删除甚至可能在所有节点上都还看不到-记住cassandra是ap而不是cp)并且ttl的数据过期,因此必须重新计算要聚合的整个集,并从一致性级别的副本数量发送到协调器计算。因此,虽然分区的数据在磁盘上顺序地跨多个sstables保存,并且可以非常高效地合并,但在协调器上仍然很昂贵,而且如果跨一个范围进行,那么传输和计算的数据量最终很容易失败(超时)。
m0rkklqb2#
cassandra是一个行存储引擎。如果要获取与特定列值匹配的所有记录,则需要对表进行完整扫描。看看这个问题。
2条答案
按热度按时间mrfwxfqh1#
为什么cassandra在内部不支持聚合函数
cassandra确实支持每请求聚合函数(java、python、javascript和一些预制函数中的自定义函数),当在单个分区上使用时,这些函数的工作范围是有限的。请记住,这种查询实际上是为了在几毫秒内得到响应而设计的,因此,如果经常查询,那么计算一百万个值的平均值的东西将无法正常工作。
聚合不能很容易地作为删除保持最新(在分布式环境中尤其困难,因为删除甚至可能在所有节点上都还看不到-记住cassandra是ap而不是cp)并且ttl的数据过期,因此必须重新计算要聚合的整个集,并从一致性级别的副本数量发送到协调器计算。因此,虽然分区的数据在磁盘上顺序地跨多个sstables保存,并且可以非常高效地合并,但在协调器上仍然很昂贵,而且如果跨一个范围进行,那么传输和计算的数据量最终很容易失败(超时)。
m0rkklqb2#
cassandra是一个行存储引擎。如果要获取与特定列值匹配的所有记录,则需要对表进行完整扫描。
看看这个问题。