May*_*hav 7 cassandra datastax-enterprise datastax
从Cassandra文档的两个不同链接中,我发现:
存储在内存中的结构,用于在访问磁盘上的SSTable之前检查memtable中是否存在行数据
和
Cassandra检查Bloom过滤器以发现哪些SSTable可能具有请求分区数据.
我的问题是上述陈述是否正确?如果是,是否为Memtable和SSTable分别维护了bloom过滤器?提前致谢.
adu*_*tra 21
甲布隆过滤器是用来检查一个元素是否存在于一组或不是通用数据结构.它的算法设计得非常快,代价是有可能返回误报.
Cassandra使用bloom过滤器来测试是否有任何SSTable可能包含所请求的分区键,而不必实际读取其内容(因此避免了昂贵的IO操作).
如果布隆过滤器返回false给定的分区键,则绝对可以肯定分区键不存在于相应的SSTable中; true但是,如果它返回,那么SSTable 可能包含分区键.当发生这种情况时,Cassandra将采用更复杂的技术来确定是否需要读取SSTable.请注意,大多数读取都会查看bloom过滤器,并且仅在某些写入期间(将memtable刷新到磁盘时)进行更新.您可以在此处阅读有关Cassandra读取路径的更多信息.
回到你的问题:
1)第一个语句("存储在内存中的结构,用于检查在访问磁盘上的SSTables之前是否存在于memtable中的行数据")恕我直言不准确:当memtable被刷新到磁盘时,bloom过滤器确实更新了,但它们没有参考记忆.
2)每个SSTable维护Bloom过滤器,即磁盘上的每个SSTable在内存中获得相应的bloom过滤器.
| 归档时间: |
|
| 查看次数: |
7571 次 |
| 最近记录: |