Cassandra数据库从入门到精通系列之三:Cassandra数据存储格式
一、Cassandra数据
Cassandra的数据包括在内存中和磁盘中的数据
这些数据主要分为三种:
- CommitLog:主要记录客户端提交过来的数据以及操作。这种数据被持久化到磁盘中,方便数据没有被持久化到磁盘时可以用来恢复。
- Memtable:用户写的数据在内存中的形式。另外一种形式是BinaryMemtable,这个格式目前Cassandra并没有使用。
- SSTable:数据被持久化到磁盘,又分为Data、Index和Filter三种数据格式。
二、CommitLog数据格式
- Cassandra在写数据之前,需要先记录日志,保证Cassandra在任何情况下宕机都不会丢失数据。这就是CommitLog日志。
- 要写入的数据按一定格式组成byte数组,写到IO缓冲区中定时被刷到磁盘中持久化。Commitlog是server级别的。每个Commitlog文件的大小是固定的,称之为一个CommitlogSegment。
- 当一个Commitlog文件写满以后,会新建一个文件。当旧的Commitlog文件不再需要时,会自动清除。
三、Memtable内存中数据结构
- 数据写入的第二个阶段,MemTable是一种内存结构,当数据量达到块大小时,将批量flush到磁盘上,存储为SSTable。
- 优势在于将随机IO写变成顺序IO写,降低大量的写操作对于存储系统的压力。
- 每一个columnfamily对应一个memtable。也就是每一张表对应一个。
- Memt