Cassandra写入数据流程是先将数据写入Commitlog中,然后写入内存Memtable中,当满足一定条件将内存中的数据刷入磁盘SSTable。
Cassandra需要两个目录来分别保存Commitlog和SSTable生成的文件,目录位置可以通过配置项修改:
data_file_directories:- /var/lib/cassandra/data commitlog_directory: /var/lib/cassandra/commitlog
CommitLog-1396061983699.log CommitLog-1396061983699.log.headerlog文件中保存了每次更新操作,header文件记录了哪些数据已经从Memtable中写入SSTable中,head文件可以删除垃圾日志,节省空间。
User-e-1-Data.db User-e-1-Filter.db User-e-1-Index.db其中,User表示ColumnFamily, e为版本标识,1代表这是User的第一个文件,每次刷入会增长。
data文件中存储的是真正的数据,其格式如下:
data文件不仅存储了key对应的值,还对每个key保存了一份索引columnIdx。columnIdx也包含布隆过滤器和索引两部分。cassandra中的行有宽行和窄行之分,宽行可能有上万个column,要更新某一个column时也是比较麻烦的,所以在这里做了一个索引。