在许多书籍和文章中都考虑这句话:
在列式体系结构中,由于要聚合的所有值都存在于同一磁盘块中,因此优化了寻求聚合特定列的值的查询。 Cassandra是列族NoSQL数据库。
如果这句话是正确的,为什么Cassandra在内部不支持聚合函数?还是我误解了这个句子或概念?
答案 0 :(得分:1)
为什么Cassandra内部不支持聚合功能
Cassandra确实支持按请求聚合功能(在Java,python,javascript和某些预制功能中都是自定义的),这些功能在单个分区上使用时在限制范围内工作。请记住,此查询实际上是为在几毫秒内回答而设计的,因此,如果要经常查询,则计算一百万个平均值的数据将无法正常工作。
由于删除操作,聚合不容易保持最新状态(尤其是在分布式环境中,因为删除操作可能尚未在所有节点上都看到,所以请记住-Cassandra不是AP而不是CP),并且ttl的数据已过期,因此整个集合必须重新计算合计值,并将其从副本的一致性级别数量发送到协调器以进行计算。因此,尽管分区的数据通过一定数量的sstables顺序保存在磁盘上,并且可以非常有效地合并,但是在协调器上仍然很昂贵,而且如果跨一定范围进行,则传输和计算的数据量可能最终会失败(定时)轻松。
答案 1 :(得分:0)
Cassandra是行存储引擎。如果要获取与特定列值匹配的所有记录,则需要对表进行完整扫描。
请参阅此other question。