问题很简单,因为我想知道cassandra如何在分区内读取?它是否从磁盘加载内存中的整个分区?
如果分区大小非常大会有什么影响?
分区中读取数据的复杂性是否为分区中的O(Log(N))(其中N是分区中的总行数),因为它使用了有序映射?
情景:
假设每个分区有100000行由唯一的群集密钥标识。因此,如果我在fetch查询中提供分区键和聚类键,那么它是否会将完整的分区加载到内存中以遍历所有聚类键以找到指定的行?
答案 0 :(得分:1)
不,它不会读取整个分区。它有一个索引结构。如果具有内存,操作系统将缓存读取和写入的文件。因此,如果节点有足够的内存,那么该节点上的所有数据最终都将存储在内存中。
答案 1 :(得分:0)
据我所知,Cassandra只维护分区键的索引和索引摘要文件,而不是集群键,所以为了遍历给定分区的所有集群键,它会将数据加载到内存中。
还有另一种理论认为它将在磁盘上执行二进制搜索。
答案 2 :(得分:0)
根据official wiki中的引用,我能找到的是行缓存。
不确定这是否与先前帖子中提到的行索引相同或是否有所不同。
在阅读维基页面后,我假设Cassandra确实从getInner
读取了整个分区,以防行缓存未命中。
当分区位于SSTable
时算法不同:Cassandra在这些情况下执行二进制搜索。
如果来自此主题的某人可以确认,那将是件好事。