nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)
nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)
2024-09-27 09:27:04  作者:一阵甘甜  网址:https://m.xinb2b.cn/sport/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方面的内容,感兴趣的朋友可以关注一下~


  • 女方见男方家长禁忌,女方见男方家长要注意什么
  • 2024-09-27女方见男方家长禁忌,女方见男方家长要注意什么女方见男方家长想要留下好印象,有一些注意事项和禁忌是很重要的,快来学习一下,做做准备!女方见男方家长要注意什么言行举止有所注意女方见男方家长,一定要注意自己的言行举止,这样才能留下好的印象准好充足准备。
  • 天猫国际招商平台(天猫海外联合广东服协助企)
  • 2024-09-27天猫海外联合广东服协助企疫情下,线下渠道受阻的广东中小服饰厂家,上天猫海外寻找拓销新通路3月6日,天猫海外与广东省服装服饰行业协会、广东省服装设计师协会达成合作,“云签约”后开启助企合作计划,600多家服装商家将陆续在天猫海。
  • 阿泰之前是哪个战队的(阿泰又多一个身份)
  • 2024-09-27阿泰又多一个身份说到阿泰,喜欢看KPL联赛的小伙伴对他都不会陌生,他是最早一批加入王者荣耀电竞赛事的职业选手,也是KPL赛场上人气居高不下的帅气男孩,和梦泪一起,两个人的人气几乎撑起了半个KPL联盟在2019年,阿泰。
  • 三亚旅游最新消息(一场文化和海滩的碰撞之旅)
  • 2024-09-27一场文化和海滩的碰撞之旅作者:九山行说说这次旅行如果说旅行是一种病,我想我已经无药可救这些年来一直在祖国的大地上游走用有限的时间换取无限的空间当祖国版图的绝大部分省份已经印刻上自己足迹的时候,有三个省还始终藏在我心中向往的领。
  • 红烧丸子怎么做好吃(红烧丸子的做法)
  • 2024-09-27红烧丸子的做法主料:肉糜300克辅料:香芹末200克、鸡蛋1个、姜葱末少许、料酒2勺、淀粉1勺、生抽3勺、香醋3勺、胡椒粉1勺、老抽1勺鸡蛋打散、姜葱末、淀粉、胡椒粉、香芹末、料酒、生抽一勺与肉糜顺时针搅拌均匀,搅。
  • 如何养殖奶牛(养殖奶牛的方法)
  • 2024-09-27养殖奶牛的方法采用“预付”饲养从产后10~15天开始,除按饲养标准给予饲料外,每天额外多给1~2千克精料,以满足产奶量继续提高的需要只要奶量能随精料增加而上升,就应继续增加精料喂量待到增料而奶量不再上升时,才将多余。
  • 养茶杯犬的注意事项有哪些(喂养茶杯犬的注意事项)
  • 2024-09-27喂养茶杯犬的注意事项茶杯犬起源于美国,发展于日韩,如今已得到进一步的改良在19世纪时,玩具贵宾犬因基因突变而诞生了最早的茶杯犬,经美国繁殖家的培育,逐渐发展成现今的模样茶杯犬小巧可爱,成为了一众贵宾爱好者的新宠由于茶杯犬。
  • 天猫会员扣费怎么退回(来电帮忙取消扣费会员业务)
  • 2024-09-27来电帮忙取消扣费会员业务  吴兴区公安分局警公办施警官日前致电党报热线,讲述了近期辖区派出所发生的一起冒充天猫客服,以操作失误将受害人列为扣费“铂金会员”,并帮助取消业务为由,指引被害人将钱转到指定账户的诈骗案例,在民警的介。
  • 把栏杆拍遍教学(把栏杆拍遍)
  • 2024-09-27把栏杆拍遍(资料图/图)隆冬时节,北风呜呜的吹,就着窗外的余晖,读辛弃疾的《水龙吟·登建康赏心亭》,忽然被“……落日楼头,断鸿声里,江南游子把吴钩看了,栏杆拍遍,无人会,登临意”的妙句击中,想起栏杆疏齿般的线条。
  • 罗志祥时间管理之术(不但是时间管理大师)
  • 2024-09-27不但是时间管理大师520,一个表白的日子,男孩罗志祥复制了他在QQ空间写好的长文,贴在微博,赢得了几千人的打赏也许这是男星为分手写过字数最多的小作文,七千多字,可以拿去申请吉尼斯纪录他说他每天写一段,连写十九天,只有最。