Cassandra数据存储简介

举报
pro_cheng 发表于 2018/01/05 17:40:29 2018/01/05
【摘要】 Cassandra 的数据模型是基于列族(Column Family)的四维或五维模型。在 Cassandra 写入数据之前,需要先记录日志 ( Commitlog),然后数据开始写入到 Column Family 对应的 Memtable 中,在满足一定条件时,再把 Memtable 的数据批量的刷新到磁盘上,存储为 SSTable 。

1、数据存储方式

Cassandra 的数据模型是基于列族(Column Family)的四维或五维模型。在 Cassandra 写入数据之前,需要先记录日志 ( Commitlog),然后数据开始写入到 Column Family 对应的 Memtable 中,Memtable 是一种按照 key 排序的内存结构,记录在缓存中,在满足一定条件(容量、条数、时间间隔超过阈值)时,再把 Memtable 的数据批量的刷新到磁盘上,存储为 SSTable

使用Memtable的优势就是把随机的IO变成了顺序IO,降低大量写操作对存储系统的压力。


2Cassandra 的数据模型及基本概念

ClusterCassandra 的节点实例,它可以包含多个Keyspace

Keyspace::用于存放 ColumnFamily 的容器,相当于关系数据库中的 Schema database

ColumnFamily::用于存放 Column 的容器,类似关系数据库中的 table 的概念

SuperColumn::它是一个特列殊的 Column, 它的 Value 值可以包函多个Column

Column:Cassandra 的最基本单位。由name , value , timestamp组成。

数据模型图如下:

 image.png

                        图1 Cassandra数据模型图


3、Cassandra中数据存放规则

data:存储真正的数据文件,既后面的SStable文件,可以指定多个目录。

commitlog:存储未写入SSTable中的数据(在每次写入之前先放入日志文件)。

cache:存储系统中的缓存数据(在服务重启的时候从这个目录中加载缓存数据)。

Commitlog中包括两部分:Commitlog-xxxx.logCommitlog-xxxx.log.headerCommitlog-xxxx.log保存上次更新操作的值,Commitlog-xxxx.log.header记录哪些数据已经从Memtable中写入到了SSTableCommitlog-xxxx.log.header也可能不存在。

SSTable中数据分为四种类型:xxxx-Data.dbxxxx-Filter.dbxxxxx-Index.dbxxxx-Statistics.dbData文件存储数据与Key对应的一些Column的索引信息(利用索引快速的找到要找的值)。Filter文件的作用是快速定位某一个Key是否在该SSTable文件中(用布尔过滤器来做判断)。Index文件用于索引文件,保存Key和在Data文件中对应的位置,在内存中查找时先哈希再二分法。Statistics文件用来存储SSTable中所包含的Column的个数和Row的个数。

Cassandra中除了用户自己定义的Keyspace之外,还有一个特殊的Keyspacesystem。其作用有二:管理Cassandra的系统元数据信息;缓存HINT数据。





【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。