Cassandra源码学习:数据文件分布
来源:互联网 发布:python 全局变量 编辑:程序博客网 时间:2024/03/29 23:52
概述
Cassandra写入数据流程是先将数据写入Commitlog中,然后写入内存Memtable中,当满足一定条件将内存中的数据刷入磁盘SSTable。
Cassandra需要两个目录来分别保存Commitlog和SSTable生成的文件,目录位置可以通过配置项修改:
- data_file_directories:- /var/lib/cassandra/data
- commitlog_directory: /var/lib/cassandra/commitlog
Commitlog
由两个部分组成,如下:
- CommitLog-1396061983699.log
- CommitLog-1396061983699.log.header
SSTable
Memtable中记录一个列族的更新记录,当数据达到配置的容量上限,或者条数限制等条件时,会被写入SSTable中。SSTable会为每个keyspace建一个目录,默认会有一个system目录,供系统使用。目录中每一次写入会生成3个文件
- User-e-1-Data.db
- User-e-1-Filter.db
- User-e-1-Index.db
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时也是比较麻烦的,所以在这里做了一个索引。
0 0
- Cassandra源码学习:数据文件分布
- Cassandra学习笔记之数据文件分布
- Cassandra源码学习:数据模型
- Cassandra源码学习:Gossip协议
- Cassandra源码学习:数据读取
- Cassandra源码学习:数据更新
- Cassandra数据分布测试
- Cassandra源码学习:一致性hash回顾
- Cassandra源码学习:机架感应策略
- Cassandra数据分布和副本
- Cassandra 源码解析汇总
- cassandra读源码---Streaming
- Cassandra源码解析
- cassandra的数据分布和副本策略
- Cassandra数据分布之5分区器
- 分布数据文件访问多个磁盘
- cassandra学习笔记2--Cassandra数据模型
- cassandra学习笔记4--Cassandra Java客户端
- Cassandra源码学习:数据模型
- 我和我的输入提示--需要的树结构
- JAVA学习脚印6: java方法调用机制
- 黑马程序员_对象,构造函数以及构造代码块
- DatePicker的使用(一)
- Cassandra源码学习:数据文件分布
- windows下使用git管理github项目
- CxImage图像处理库VS2010编译和调用(静态库和动态库调用)
- 网络编程
- uva 11138 - Nuts and Bolts(二分匹配)
- Android 图片Bitmap保存到内存卡
- CodeForces Round #191 (327C) - Magic Five 乘法逆元与费马小定理
- 最大子段和几种算法
- 8款唯美设计的HTML5/CSS3应用