Cassandra源码学习:数据文件分布
2014-04-08 19:38
190 查看
概述
Cassandra写入数据流程是先将数据写入Commitlog中,然后写入内存Memtable中,当满足一定条件将内存中的数据刷入磁盘SSTable。Cassandra需要两个目录来分别保存Commitlog和SSTable生成的文件,目录位置可以通过配置项修改:
[html] view
plaincopyprint?
data_file_directories:- /var/lib/cassandra/data
commitlog_directory: /var/lib/cassandra/commitlog
Commitlog
由两个部分组成,如下:[html] view
plaincopyprint?
CommitLog-1396061983699.log
CommitLog-1396061983699.log.header
log文件中保存了每次更新操作,header文件记录了哪些数据已经从Memtable中写入SSTable中,head文件可以删除垃圾日志,节省空间。
SSTable
Memtable中记录一个列族的更新记录,当数据达到配置的容量上限,或者条数限制等条件时,会被写入SSTable中。SSTable会为每个keyspace建一个目录,默认会有一个system目录,供系统使用。目录中每一次写入会生成3个文件
[html] view
plaincopyprint?
User-e-1-Data.db
User-e-1-Filter.db
User-e-1-Index.db
其中,User表示ColumnFamily, e为版本标识,1代表这是User的第一个文件,每次刷入会增长。
Filter文件
filter文件中存放着一个布隆过滤器,可以快递判断一个key是否在data文件中。布隆过滤器是一种不确定性算法:如果通过布隆过滤器判断出这个key不在SSTable中,就一定不在;如果判断出在SSTable中,不一定在。通过布隆过滤器可以减少访问index文件的次数。Index文件
Index文件保存data文件中每个key对应的位置:index文件中的key是有序的,防止index文件非常大,查找一个key花费较大开销,cassandra做了一个内存缓存,记录部分key在index文件中的位置:
这个间距是可以调节的,要判断一个key在data中的位置先查询内存缓存,得到这个key在index文件中的位置,然后再定位到data文件位置。
Data文件
data文件中存储的是真正的数据,其格式如下:data文件不仅存储了key对应的值,还对每个key保存了一份索引columnIdx。columnIdx也包含布隆过滤器和索引两部分。cassandra中的行有宽行和窄行之分,宽行可能有上万个column,要更新某一个column时也是比较麻烦的,所以在这里做了一个索引。
相关文章推荐
- C#源码学习之---将数据库数据以XML文件格式保存
- Cassandra源码学习:数据读取
- Cassandra源码学习:数据更新
- Cassandra源码学习:数据模型
- 『TensorFlow』SSD源码学习_其四:数据介绍及TFR文件生成
- Vue.js源码学习一 —— 数据选项 State 学习
- 学习笔记之cocos2d-x2.1.1实现修改plist文件数据,用TinyXml解析XML
- Cocoa2d-X学习笔记第二篇:通过include文件看看源码构架
- flume-1.7.0将源码修改为按文件读取数据
- Android蓝牙学习——搜索、配对、传文件(附源码)
- MyCat 学习笔记 第九篇.数据分片 之 数值分布
- 通过DefaultListableBeanFactory加载.xml配置文件学习Spring-IoC容器注册/加载bean的机制(源码走读)
- Greenplum学习11--添加节点gpexpand ②(添加一台主机,数据先迁移)(改写节点配置文件)
- ZendFramework学习第三章(核心组件—使用配置数据之从XML配置文件中读取数据)
- 在MVC中实现和网站不同服务器的批量文件下载以及NPOI下载数据到Excel的简单学习
- 共同学习Java源码--常用数据类型--String(十一)
- cassandra学习笔记2--Cassandra数据模型
- OpenStack:glance_store:_drivers/filesystem.py文件源码学习-02
- SQL Server 2005学习笔记之插入大规模的XML文件数据
- UNIX再学习 -- 系统数据文件和信息