nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)
nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)
2024-10-01 10:23:45  作者:一阵甘甜  网址: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方面的内容,感兴趣的朋友可以关注一下~


  • 超有效的护肤技巧你知道几个(正确的护肤步骤是怎样的)
  • 2024-10-01正确的护肤步骤是怎样的护肤并不是简单的洗脸,然后涂抹润肤乳其实护肤有很大的讲究,一步一步的护肤才能让皮肤吸收护肤品中的营养物质,避免受到外界刺激,那正确的护肤步骤是怎样的正确的护肤步骤是怎样的?1、清洁经过一晚上睡眠后,脸。
  • 白草是什么意思(什么是白草)
  • 2024-10-01什么是白草白草(学名:PennisetumcentrasiaticumTzvel.)是禾本科狼尾草属植物,多年生具横走根茎秆直立,单生或丛生,高20-90厘米叶鞘疏松包茎,近无毛;叶舌短,具长1-2毫米的纤毛;。
  • 黑珍珠樱桃小番茄(樱桃小番茄)
  • 2024-10-01樱桃小番茄大家晚上好!就拿我今年八月中旬开始经过我反复实验,我种植的樱桃番茄现在还在结果,虽然成都市现在室外温度只有2到4度,但是我种在七楼楼顶室外的番茄还在生长,还在开花结果这是我亲自反复实验的结果,真没有想。
  • 衡山医院演员表(衡山医院电视剧简介)
  • 2024-10-01衡山医院电视剧简介《衡山医院》主演:秦俊杰、孙铱、涂松岩、吴文璟、孙爽、刘子赫、奚美娟《衡山医院》是由董志强执导的谍战剧该剧以民国时期的衡山医院为背景,讲述了以我党和国民党为首的多方势力的较量角逐,上演了一场二十世纪3。
  • 海绵精神指的是什么(海绵精神需要学习吗)
  • 2024-10-01海绵精神需要学习吗海绵精神指像海绵似的不断积累知识,也要像海绵似的挤干水后吸收新的水分,加快对已学知识的消化吸收并学以致用对党员干部来讲,发挥“海绵精神”,就要海纳百川、兼容并蓄地吸收知识新形势下,要学政策文件领会上级。
  • 手工女神节礼物送给妈妈怎么做
  • 2024-10-01手工女神节礼物送给妈妈怎么做1可以做手工花束、手工饰品、手工卡片等礼物送给妈妈2做手工礼物可以表达自己的心意,也能够展现自己的创意和技巧妈妈会更加珍惜这样的礼物3可以在网上或者书店找一些手工制作教程,学习制作手工礼物的方法和技巧。
  • 电商设计要做哪些东西(做电商设计应该知道的基础知识)
  • 2024-10-01做电商设计应该知道的基础知识做电商设计时一些最常用的知识是每一个设计师都应该掌握的,现在以淘宝网为例说一下都有哪些方面一、淘宝网店各部分图片尺寸店招淘宝店招位于淘宝店铺的最上面,淘宝店招区域也是展现店铺名称、标志甚至是店铺整体格。
  • 米汤圆的制作方法(原来自制简易版黄米汤圆才是真正的米饭杀手)
  • 2024-10-01原来自制简易版黄米汤圆才是真正的米饭杀手小时候在老家,正月十五都是家里自制汤圆,后来为了方便去超市买,缺少了制作过程,好像元宵节不太完美现在工作繁忙,没时间仔细去做馅料,就用这个简易版代替一下吧By舌尖上的幸福味道用料大黄米面210克热水1。
  • 铜跟着什么价格走(铜和银走了截然不同的道路)
  • 2024-10-01铜和银走了截然不同的道路铜和白银今年走了不同的道路,全球经济增长和供应紧张促成了铜连续第三年上涨但白银未能获得牵引力,有望遭受2014年以来最大的年度损失全球宏观对冲基金NorburyPartners的首席投资官DecioN。
  • 速8有沃克吗(保罗依旧倍受网友怀念)
  • 2024-10-01保罗依旧倍受网友怀念《速度与激情》已经连续拍了7部了,对于他的影迷来说,这部电影还延续着他曾经的让人肾上腺素飙升的速度还有对生活的那份激情从2001上映以来,将要过去15个年头了,环球影业的这一重大惊险动作犯罪片在全球获。
  • 饭后肚子疼拉肚子是肠易激吗(肚子疼拉肚子便秘肠易激怎么办)
  • 2024-10-01肚子疼拉肚子便秘肠易激怎么办你最近也工作时间时间突然肚子痛,走进洗手间之后,不是拉肚子就是什么也拉不出来吗?这种病上医院检查也不找不到原因,但是这种状况又令人感到困扰,那么这是什么病,有人甚至认为自己患有不治之症,郁郁寡欢,不要。
  • 微视直播设计(微视品牌体验设计)
  • 2024-10-01微视品牌体验设计项目背景2017年是整个短视频大爆发的时期,内容产业逐渐成为移动互联网新的生力军短视频产品同质化,用户体验趋同,团队希望运用品牌体验的全局设计思维,从视觉识别,用户体验,线上线下推广及产品礼品等多个维。