memtable是可以使用key来访问的基础的数据回写缓存–并不是flush的时候,将membable完全写入缓存。
将memtable写入到sstable的过程叫做flush,当你想减少commitlog的消耗时间时,你可以启动flush。
meltable按照key来排序,按照序列化的方式回写。回写是非常快的,消耗仅仅是增加commitlog和分期序列化的写。
当flushed时,SSTable文件是不可以被修改的。
当绑定一些SSTable文件时,读应该是可以被允许的。
Cassandra 的compactions(合并):合并旧的SSTable文件为一个新的。compactions策略是可启动的。
SizeTieredCompactionStrategy 是讲sstable合并成相似大小的。
LeveledCompactionStrategy是讲sstable按照等级进行排序,每次的操作都比前面的大。
由于SSTable是按照key值进行排序的,因此合并是非常高效的。合并操作的负载是非常均衡的。
Cassandra通过两步骤来减轻合并对应用的影响:
1、Cassandra通过变量compaction_throughput_mb_per_sec(default 16MB/S)可以调节合并时I/O大小。
2、Cassandra当发现合并的partition为hot时,Cassandra将会请求一个合并的partition为一个新的cache。
当合并完成后,旧的SSTable文件当被读结束后会被删除。