7. Cassandra Write

7. Cassandra Write

先给出一个图:



 

      如图所示了Cassandra write data的全过程:先写日志文件Commitlog,然后数据才会写到ColumnFamily在内存中对应的Memtable,内存中Memtable达到一定条件后批量Flush到磁盘,存储为SSTable。 

 

Commitlog

    (1) 文件存放位置是在Cassandra配置文件中指定的,此文件的作用是确保异常情况下,根据持久化的SSTable和  Commitlog重构内存中Memtable内容;

     (2) 当一个Commitlog文件写满后会自动新建一个Commitlog文件;

     (3) 当旧的Commitlog文件文件不在需要时,这个Commitlog文件会自动清除;

 

Memtable

     (1) 是一种memory结构,每个ColumnFamily对应一个Memtable;

     (2)Memtable里内容按照key排序,这样使随机IO写编程顺序IO写,降低了大量的写操作对存储系统的压力;

     (3)内存中Memtable达到一定条件后批量Flush到磁盘,存储为SSTable,下一个Memtable又需要刷新时刷新到一个新的SSTable,即每次刷新产生一个新的SSTable;

 

SSTable

     (1)文件存放位置同样是在Cassandra配置文件中指定的;

     (2) 按照key排序后(在Memtable中完成)存储key/value字符串;

     (3)SSTable一旦写入就不能改变,只能读取;另为避免大量SSTable带来性能影响,定期将SSTable合并成一个SSTable,称之为Compaction,由于每个SSTable中key都排好了顺序,因此只需做一次合并顺序就可以完成任务;

     (4)SSTable的data目录,如下图



 如图Users为ColumnFamily名字,1为序号,Users-1-Data.db是SSTable的数据文件,存储排好顺序的key/value字符串;Users-1-Filter.db为Bloom Filter算法生成的映射文件(Bloom Filter算法:快速定位待查询key所属的SSTable),Users-1-Index.db为索引文件,保存key在数据文件中的偏移量;

 

8. Cassandra Read

同样,先给出一个图;



 读取数据时,需要合并读取ColumnFamily对应的所有SSTable和Memtable;

 Bf确定待查找key所在的SSTable;

 Idx确定key在SSTable中的偏移量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值