Cassandra的内部数据存储结构
2011-07-21 22:56
169 查看
Cassandra中数据存放规则
data:存储真正的数据文件,既后面的SStable文件,可以指定多个目录。
commitlog:存储未写入SSTable中的数据(在每次写入之前先放入日志文件)。
cache:存储系统中的缓存数据(在服务重启的时候从这个目录中加载缓存数据)。
合理安排上面节点之间的位置以提高性能。
Commitlog
Commilog中包括两个部分:Commilog-XXXX.log和Commilog-XXXX.log.header。Commitlog-XXXX.log文件中保存上次更新操作的值,Commitlog-XXXX.log.header记录了那些数据已经从Memtable中写入SSTable中。Cassandra有“周期”和“批量”两种方式记录Commitlog的方式。当一个Commitlog文件的大小超过一定阀值的时候就会新建一个Commitlog。Cassandra每次更新信息将写入Commitlog中,并且每隔一定时间间隔同步文件(还要同步缓存中的数据,使其全部保存在Commitlog中)。
Memtable
数据写入Commitlog中后会缓存在Memtable中(每个Memtable为一个ColumnFamily服务)。在Memtable中容量、条数、时间间隔超过阀值后就会将数据写入磁盘形成一个SSTable文件。Memtable中保存的数据是ConcurrentSkipListMap<DecoratedKey, ColumnFamily>。写入时按照Key的顺序。使用Memtable的优势就是把随机的IO变成了顺序IO(这个好像在很多系统中都会用到)。
SSTable
Cf1的一个SSTable文件由如下文件组成:
Cf1-e-1-Data.db
Cf1-e-1-Filter.db
Cf1-e-1-Index.db
Cf1-e-1-Statistics.db
(文件名)-(版本号)-(文件ID)-(四个不同部分)
Filter文件的作用是快速定位某一个Key是否在该SSTable文件中(用布尔过滤器来做判断)。
Index文件用于索引文件,保存Key和在Data文件中对应的位置。在内存中查找的时候先哈希再二分查找(还有一个cache的优化,这个怎么感觉很像kernel中惯用的手法,哈哈)。
Data文件存储数据和与Key对应的一些Column的索引信息(利用索引快速地找到要找的值)。
Statistics文件用来存储SSTable中所包含的Column的个数和Row的个数。
系统表空间
这个部分就和很多的关系型数据库的做法很像哈。
在Cassandra中除了用户自己定义的Keyspace之外还有一个特殊的Keyspace:system。
管理Cassandra的系统元数据信息。
缓存HINT数据。
欢迎拍砖。
data:存储真正的数据文件,既后面的SStable文件,可以指定多个目录。
commitlog:存储未写入SSTable中的数据(在每次写入之前先放入日志文件)。
cache:存储系统中的缓存数据(在服务重启的时候从这个目录中加载缓存数据)。
合理安排上面节点之间的位置以提高性能。
Commitlog
Commilog中包括两个部分:Commilog-XXXX.log和Commilog-XXXX.log.header。Commitlog-XXXX.log文件中保存上次更新操作的值,Commitlog-XXXX.log.header记录了那些数据已经从Memtable中写入SSTable中。Cassandra有“周期”和“批量”两种方式记录Commitlog的方式。当一个Commitlog文件的大小超过一定阀值的时候就会新建一个Commitlog。Cassandra每次更新信息将写入Commitlog中,并且每隔一定时间间隔同步文件(还要同步缓存中的数据,使其全部保存在Commitlog中)。
Memtable
数据写入Commitlog中后会缓存在Memtable中(每个Memtable为一个ColumnFamily服务)。在Memtable中容量、条数、时间间隔超过阀值后就会将数据写入磁盘形成一个SSTable文件。Memtable中保存的数据是ConcurrentSkipListMap<DecoratedKey, ColumnFamily>。写入时按照Key的顺序。使用Memtable的优势就是把随机的IO变成了顺序IO(这个好像在很多系统中都会用到)。
SSTable
Cf1的一个SSTable文件由如下文件组成:
Cf1-e-1-Data.db
Cf1-e-1-Filter.db
Cf1-e-1-Index.db
Cf1-e-1-Statistics.db
(文件名)-(版本号)-(文件ID)-(四个不同部分)
Filter文件的作用是快速定位某一个Key是否在该SSTable文件中(用布尔过滤器来做判断)。
Index文件用于索引文件,保存Key和在Data文件中对应的位置。在内存中查找的时候先哈希再二分查找(还有一个cache的优化,这个怎么感觉很像kernel中惯用的手法,哈哈)。
Data文件存储数据和与Key对应的一些Column的索引信息(利用索引快速地找到要找的值)。
Statistics文件用来存储SSTable中所包含的Column的个数和Row的个数。
系统表空间
这个部分就和很多的关系型数据库的做法很像哈。
在Cassandra中除了用户自己定义的Keyspace之外还有一个特殊的Keyspace:system。
管理Cassandra的系统元数据信息。
缓存HINT数据。
欢迎拍砖。
相关文章推荐
- SQL SERVER 存储/ 存储结构 内部数据结构
- Cassandra 的数据存储结构
- Cassandra 数据存储结构与数据读写
- Cassandra 的数据存储结构——本质是SortedMap<RowKey, SortedMap<ColumnKey, ColumnValue>>
- Cassandra 的数据存储结构
- Cassandra存储time series类型数据时的内部数据结构?
- Cassandra的数据存储结构——cassandra总结(一)
- Cassandra 的数据存储结构
- 数据结构实现之Table(符号表,内部存储key-value对)
- 哈希表存储数据结构原理
- 数据结构(二)链表1:链式存储的基本操作
- 【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)
- 【数据结构】数据的存储结构
- HBase (2)---数据存储结构
- 数据结构——串的堆分配存储
- SQL Server 存储(8/8):理解数据文件结构
- 10gen工程师:MongoDB数据文件内部结构
- MongoDB数据文件内部结构
- mysql 利用mysqldump 导入导出表结构、数据、存储过程及函数
- 关于HashSet 集合存储数据的结构(哈希表)