nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)
nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)
2024-11-22 11:06:06  作者:一阵甘甜  网址:https://m.xinb2b.cn/tech/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-11-22预言家如何掌控局势在狼人杀中一直有一种比较基础的打法,那就是警徽流,在游戏中,几乎所有的熟手玩家在发言中进行逻辑推断时,都会提到“警徽流”,特别是在警长竞选投票前后的这段时间内的发言那么究竟什么是“警徽流”?这又是怎样。
  • 小学生积分制兑换礼品(盘龙小学这场活动大受欢迎)
  • 2024-11-22盘龙小学这场活动大受欢迎12月9日,在盘龙区城乡生活垃圾分类管理事务中心的精心组织下,云南京环盘宸的工作人员带着各种精美的小礼品来到盘龙小学,开展了一场生活垃圾积分兑换活动活动当天,云南京环盘宸的工作人员早早来到校园,撑起了。
  • 出国留学真的有用吗(出国留学要不要)
  • 2024-11-22出国留学要不要目前,出国留学有以下三个方面的问题:一是出国成本高按照国内和国外,尤其是欧美发达国家的生活费用和学习费用而言,出国留学成本一年至少要有几十万人民币的一个支出,这一块儿对于普通家庭来说,甚至很多中产阶级。
  • 迷你世界xg下载最新版(迷你世界xg手机版下载)
  • 2024-11-22迷你世界xg手机版下载迷你世界官方最新版本是一款卡通像素风格的沙盒冒险类手机游戏,采用的是经典像素方块的画风,在这里,玩家只需使用游戏账号进行登录,进入游戏后就可以免费获取新手专属福利,告别了人数过多造成的网络卡顿,让你畅。
  • 方便面怎么煮最好吃不用锅煮(就是这十五款方便面)
  • 2024-11-22就是这十五款方便面本期要点值得回购的15款方便面超下剧的4种方便面吃法值得回购的15款方便面1.华丰三鲜伊面简简单单加一个蛋,配几颗小青菜,就非常舒服了2.和厨担担面这个里面真的有肉哦~3.出前一丁夜深嘴馋,加根烤肠,。
  • 金宇彬蓝光图集(金宇彬抗癌成功后)
  • 2024-11-22金宇彬抗癌成功后据媒体报道,韩国艺人金宇彬将与崔东勋导演合作新剧,3月28日起即将开启拍摄工作,时隔4年回归荧幕金宇彬1989年出生于韩国首尔,身高188cm,在2008年就开始在首尔时装周登台走秀,成为专业的时装男。
  • 20世纪最后的默片(默片时代的巅峰之作与古希腊悲剧的内在联系)
  • 2024-11-22默片时代的巅峰之作与古希腊悲剧的内在联系电影自诞生以来,已经走过了100多年的历史,站在当下回望百年之前,总有一些电影是不可错过的经典,总有一些电影是值得反复被人讨论和铭记其中,《党同伐异》就是这样一部1916年,著名导演大卫·格里菲斯,上。
  • 对应点是什么意思(对应点的含义)
  • 2024-11-22对应点的含义定义:全等图形中,互相重合的点,相等的边或角对应的点.概念:一般地,我们把原图形中的点和新图形的点组成的一对点叫做对应点.两个图形相似或者全等,则存在对应点.一般,如果两个图形全等,那么相等的边则称为。
  • 晒干茄子怎么晒比较好(晒茄子忌直接晒)
  • 2024-11-22晒茄子忌直接晒大家好,我是晓苹,一个喜欢在厨房钻研美食的宝妈,分享简单的食材,家常做法,感受家的味道人间的烟火,一日三餐,喜欢关注食烟火味伏天,遇到这菜别手软!正当季,买50斤晒干囤着,比新鲜好吃,放一年都不坏!三。
  • 你有听过迪玛希的歌么(迪玛希的这首歌)
  • 2024-11-22迪玛希的这首歌《战争与和平》是俄国文豪列夫·托尔斯泰的旷世巨作,几乎所有关于世界文学名著的推荐书单里,这部书都不会缺席列夫·托尔斯泰创作《战争与和平》,总共花了六年的时间短视频、微博……短平快的节奏下,已经很难容下。