Cassandra使用一个类似于日志结构的结合树(Log-Structured Merge Tree)的存储结构,不像传统关系数据库那样使用B-Tree。 Cassandra会避免在写之前去读。

“写前读”(Read-before-write), 特别是在一个大的分布式系统里,会对读性能产生影响,还会带来其它问题,比如,两个客户端同时去读,其中一个去更新该行的A列,另外一个去更新该行的B列,就可能把对A列的更新覆盖掉。“写前读”,也会破坏cache,增加IO。

为了避免“写前读”的情况,cassandra的存储引擎会对即将要进行的插入、更新进行整理,只会按顺序,以追加的模式仅写入这一行更新的部分。 。 一个日志模式的存储引擎,为了避免数据相互覆盖,使用顺序IO去更新数据写入普通硬盘HDD或者固态硬盘SSD是必须的。

在HDD中,随机写比顺序写会导致大量的寻址操作,这个寻址操作的危害是相当大的。使用顺序IO,从而避免更多写入被放大和磁盘故障,Cassandra特别适合廉价的、大众消费的SSD。