nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)
nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)
2024-07-05 07:36:35  作者:一阵甘甜  网址:https://m.xinb2b.cn/life/jjt227515.html
概述

前面已经对Cassandra的一些概念性东西做了介绍,所以就不多说明了,今天主要分享Cassandra 的数据存储结构几种形式--CommitLog、Memtable和SSTable,下面一起看看吧!

Cassandra 的数据存储结构

Cassandra 中的数据主要分为三种:

CommitLog:主要记录下客户端提交过来的数据以及操作。这个数据将被持久化到磁盘中,以便数据没有被持久化到磁盘时可以用来恢复。Memtable:用户写的数据在内存中的形式,它的对象结构在后面详细介绍。其实还有另外一种形式是 BinaryMemtable 这个格式目前 Cassandra 并没有使用,这里不再介绍了。SSTable:数据被持久化到磁盘,这又分为 Data、Index 和 Filter 三种数据格式。CommitLog数据格式

CommitLog 的数据只有一种,那就是按照一定格式组成 byte组数,写到IO缓冲区中定时的被刷到磁盘中持久化,CommitLog 的持久化方式有两种,一个是 Periodic,一个是 Batch,它们的数据格式都是一样的,只是前者是异步的,后者是同步的,数据被刷到磁盘的频繁度不一样。

nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)(1)

CommitLog 的相关的类结构图

它持久化的策略也很简单,就是首先将用户提交的数据所在的对象 RowMutation 序列化成 byte 数组,然后把这个对象和 byte 数组传给 LogRecordAdder 对象,由 LogRecordAdder 对象调用 CommitLogSegment 的 write 方法去完成写操作。

nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)(2)

CommitLog 文件数组结构

上图中每个不同的 columnFamily 的 id 都包含在 header 中,这样做的目的是更容易的判断那些数据没有被序列化。

CommitLog 的作用主要是为恢复没有被写到磁盘中的数据。

nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)(3)

CommitLog 数据格式的变化过程

Memtable 内存中数据结构

Memtable 内存中数据结构比较简单,一个 ColumnFamily 对应一个唯一的 Memtable 对象,所以 Memtable 主要就是维护一个 ConcurrentSkipListMap类型的数据结构,当一个新的 RowMutation 对象加进来时,Memtable 只要看看这个结构是否 <DecoratedKey, ColumnFamily> 集合已经存在,没有的话就加进来,有的话取出这个 Key 对应的 ColumnFamily,再把它们的 Column 合并。

Memtable 相关的类结构图如下:

nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)(4)

Memtable 相关的类结构图

Memtable 中的数据会根据配置文件中的相应配置参数刷到本地磁盘中。

其实Cassandra 的写的性能很好,好的原因就是因为 Cassandra 写到数据首先被写到 Memtable 中,而 Memtable 是内存中的数据结构,所以 Cassandra 的写是写内存的。下图基本上描述了一个 key/value 数据是怎么样写到 Cassandra 中的 Memtable 数据结构中的。

nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)(5)

数据被写到 Memtable

SSTable 数据格式

每添加一条数据到 Memtable 中,程序都会检查一下这个 Memtable 是否已经满足被写到磁盘的条件,如果条件满足这个 Memtable 就会写到磁盘中。先看一下这个过程涉及到的类。相关类图如图 所示:

nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)(6)

SSTable 持久化类结构图

Memtable 的条件满足后,它会创建一个 SSTableWriter 对象,然后取出 Memtable 中所有的 <DecoratedKey, ColumnFamily> 集合,将 ColumnFamily 对象的序列化结构写到 DataOutputBuffer 中。接下去 SSTableWriter 根据 DecoratedKey 和 DataOutputBuffer 分别写到 Date、Index 和 Filter 三个文件中。

总结

今天主要描述了 Cassandra 中数据的主要的存储格式,包括内存中和磁盘中数据的格式,其实Cassandra的存储机制借鉴了Bigtable的设计,采用Memtable和SSTable的方式。

Cassandra在写数据之前,需要先记录日志,称之为Commit Log,然后数据才会写入到Column Family对应的MemTable中,且MemTable中的数据是按照key排序好的。SSTable一旦完成写入,就不可变更,只能读取。

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)(7)

  • 江南百景图螃蜞能干嘛(江南百景图螃蜞用途介绍)
  • 2024-07-06江南百景图螃蜞用途介绍目前开荒松江府正在热火朝天的进行,大家在蟹塘和大街上都可以获得螃蜞,当螃蜞攒够了之后就可以去兑换我们想要的东西了螃蜞可以在松江府中兑换到一些限定建筑,这些建筑都是松江府必不可少的装饰品螃蜞可以兑换红灯。
  • 送男友实用礼物排行榜(送男朋友礼物排行榜)
  • 2024-07-06送男朋友礼物排行榜打火机:女朋友们送打火机给男友作为生日礼物,尤其适合给那些喜欢抽烟或者收藏打火机的男性做礼物女生们可以选择做工优良的包装精致的打火机皮带:如果女朋友们送皮带给男友的话,就得知道送皮带有“想要收住男友的。
  • 古代的户部是什么衙门(古代的户部简述)
  • 2024-07-06古代的户部简述户部,中国古代官署名,为掌管户籍财经的机关,六部之一,长官为户部尚书,曾称地官、大司徒、计相、大司农等户部起源源先于秦《周庄》记载此职为“地官大司徒”;秦为“治粟内使”,两汉称“大农令”和“尚书民曹”。
  • 一般人腋下都有狐臭吗(我们腋下的狐臭)
  • 2024-07-06我们腋下的狐臭在非洲所有的大型食肉动物中,斑鬣狗最善于社交狮群一般由十几个个体组成,但一支斑鬣狗族群大约由40到80个个体组成它们不会每时每刻都出现在同一个地方,很多小群体会在一天之内不断地形成又解散这种群体组成的。
  • 赵睿为什么可以代表广东出战(广东队最新消息)
  • 2024-07-06广东队最新消息赵锦洋或被送走北京时间3月26日,由于还是全明星周末,球员是迎来一个短暂的小假期好好休息调整一下,第三阶段比赛开打后联盟各支球队基本都是隔天就一战,还要前往客场作战等,球员早就身心疲惫不堪了,全明星周。
  • 花的颜色形成的原因(陪你一起解密)
  • 2024-07-06陪你一起解密花之所以有五颜六色,是因为有各种色素色素大致可分为两大类:类叶红素,也就是我们常说的类胡萝卜素类红叶素为数不多,不溶于水,可变成黄色或桔黄色红、蓝、紫等颜色的花青素和黄色的花黄色素,也叫黄酮植物的种类。
  • 凝血四项怎么看凝血功能(你能从凝血四项)
  • 2024-07-06你能从凝血四项说到凝血功能检测,想必大家都不陌生,这既是心内科的常规检测,也是术前的必查项目,检测结果对于指导临床诊疗起着决定性作用,稍有疏忽,就有可能酿成大错作者:王玉伟金迪潍坊市益都中心医院心内科美剧《周一清晨。
  • 岭南文化地理知识(岭南地名文化的区域特色)
  • 2024-07-06岭南地名文化的区域特色立秋地名作为一种文化现象,不仅是注记地理实体或地域空间的一种符号,而且是一种既可视又可悟的文化景观它所体现的地域概念和地域精神是地域文化的重要内涵,所以研究地域文化不可忽视地名重视地名文化的区域差异也。
  • 为什么抖音关闭私聊(你的社交账号可能已被操控)
  • 2024-07-06你的社交账号可能已被操控如果你的微信、微博关注列表,突然出现一堆营销账号,QQ突然被加进陌生群组,抖音莫名关注某网红……不要怀疑,你的信息已被泄露,黑灰产团伙已经成功操控了你的账户史上最大规模数据窃取案,涉事公司已挂牌新三板。
  • 海明威年轻事例(比米尼到处流传海明威的故事)
  • 2024-07-06比米尼到处流传海明威的故事来源:环球时报【环球时报驻巴哈马特约记者何珊】美国知名作家海明威与比米尼岛有着一段不为人熟知的深厚渊源比米尼位于加勒比岛国巴哈马西部,是该国众多岛屿中距离美国最近的一个,与佛罗里达州仅50海里之隔它以。
  • 正义联盟海王叫什么名字(正义联盟的海王撞脸徐锦江)
  • 2024-07-06正义联盟的海王撞脸徐锦江DC近期上映的英雄大片《正义联盟》,剧中拥有狂野长卷发还有超猛的纹身肌肉身材的「海王」出场就吸引了大家的目光,不过就有网友认为,由38岁的美国男演员杰森摩莫亚饰演的海王,怎么有点眼熟?这个深邃五官和威。