nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)
nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)
2024-11-22 02:41:30  作者:一阵甘甜  网址:https://m.xinb2b.cn/know/jjt227515.html
概述

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

Cassandra 的数据存储结构

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

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

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


CommitLog 的相关的类结构图

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


CommitLog 文件数组结构

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

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


CommitLog 数据格式的变化过程

Memtable 内存中数据结构

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

Memtable 相关的类结构图如下:


Memtable 相关的类结构图

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

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


数据被写到 Memtable

SSTable 数据格式

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


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方面的内容,感兴趣的朋友可以关注一下~


  • 微软地图安卓版(Win10手机版全新地图应用)
  • 2024-11-22Win10手机版全新地图应用在WP8.1系统中,微软设置了许多隐藏的数据流量上限,用户必须在WiFi网络中才能在下载一些大型文件或应用,不过当用户身边没有无线网络却又急需下载这类文件时,WP8.1的这一限制就会特别不便,尤其是需。
  • 蜘蛛侠2新镜头预告(蜘蛛侠2加长7分钟)
  • 2024-11-22蜘蛛侠2加长7分钟8月30日漫威大事件1.罗素兄弟导演分享片场照片《复联3&4》导演罗素兄弟分享了无限战争片场乔什·布洛林饰演的灭霸与小罗伯特·唐尼饰演的钢铁侠正在拍摄泰坦星上二人对决戏份的幕后照片,看过电影的。
  • 5部最让人掉眼泪的韩剧(那些年虐到让我们心痛的四部韩剧)
  • 2024-11-22那些年虐到让我们心痛的四部韩剧最近看了这多高甜的韩剧,也狠狠地让我们吃了把狗粮,其实细数一下,也有许多让我们哭着眼泪停不下来的的韩剧,,韩剧就是这么有魅力,能让我们哭,也能让我们笑韩剧进军中国第一部电视剧,应该就是《蓝色生死恋》吧。
  • 得了肺结节每天都担心(被肺结节支配5个月)
  • 2024-11-22被肺结节支配5个月不少患者在网上向我咨询时先不说咨询的各类纷杂的问题,我首先能够感觉到的是一种普遍焦虑的情绪——凡是与肺结节沾上关系的患者或多或少都存在着些许焦虑或恐慌,下面这位患者亦是如此我将这位患者的个人亲身经历及。
  • 考研英语词组(考研英语熟词生义)
  • 2024-11-22考研英语熟词生义Remoteadj关系疏远的,冷淡的,相差很大的同义词distantRemovev.去掉,消除,开除派生词removed,adj.远的,远离的,隔代的Removaln.除去,切除,免职,开除Remai。
  • 王者荣耀无人超越的神级cos英雄(这是你点的精品cosplay套餐)
  • 2024-11-22这是你点的精品cosplay套餐游戏cos一直是广受人们关注的表演之一毕竟,划破次元壁,将游戏里的人物代入现实,是许多人的梦想之一王者荣耀官方也是大力支持游戏cos,并且不时在官方微博中点赞夸奖一些用心的cos下面这些都是被官方认可。
  • 福尔摩斯探案集排名(福尔摩斯式的探案)
  • 2024-11-22福尔摩斯式的探案今天是九一八事变83周年今晚19:35,48集抗战悬疑推理剧大戏《红色》即将登陆湖北卫视长江剧场实力派演员小陶虹、张鲁一、周一围、刘敏领衔主演,众多戏骨李天柱、谢园、李成儒等倾情加盟,共同谱写了一段特。
  • 两处相思一段离愁(一地相思两处凉)
  • 2024-11-22一地相思两处凉浓酒不消秋夜永,夜阑珊凉月半窗,愁轻透欲拟断章词韵疏,意轻浅画屏不展旧时眉,花落无声,泪难收1.秋凉渐起里,一抹萧瑟氤氲了秋的眉眼几度春去,夏来,秋至流光轻吻着四季的枝蔓,轻轻浅浅的流转而尘世已在春的。
  • 梅干菜烧肉简单的做法(梅干菜烧肉做法千百种)
  • 2024-11-22梅干菜烧肉做法千百种大家好,我是舒晨,每天在这里分享各种家常美食,今天给大家分享梅干菜的经典吃法“梅干菜烧肉”梅干菜烧肉,浙江绍兴的名菜,属于浙菜系主要食材是梅干菜和五花肉,干菜吸收肉脂而去涩达嫩,五花肉经干菜吸脂肥而不。
  • 宋茜沈梦辰学习芭蕾(宋茜这次居然被)
  • 2024-11-22宋茜这次居然被从东北出来的人,无论男女老少,说话都自带幽默的气息而“魔性”的东北话和东北人爽朗不拘小节的性格,使得东北具有极强的包容性,哪怕是第一次来到这个地方,也能让人迅速融入其中,解放天性就像上一期的《我们来了。
  • 车被撞后贬值多少(车辆被撞能要贬值)
  • 2024-11-22车辆被撞能要贬值有网友问,车被追尾,能要求肇事方赔偿贬值损失吗?车辆发生事故,势必会影响残值如果15万的车被撞之后只能卖13万,那这2万的差价就是贬值损失,业内叫做“折旧费”既然是别人的过错导致贬值,赔偿不是理所应当。