nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)
nosql数据库与数据仓库(详解分布式nosql数据库Cassandra数据存储结构)
2024-11-05 08:38:51  作者:一阵甘甜  网址: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,它们的数据格式都是一样的,只是前者是异步的,后者是同步的,数据被刷到磁盘的频繁度不一样。


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-06十万个冷笑话又被上美状告葫芦娃侵权提起上海美术电影制片厂来,那可是上个世纪国漫的辉煌,虽然很多人在那个时候都把动画片当成是给小孩子看的,但是这些所谓的儿童动画片却代表了国漫曾经的巅峰,并且走出了国门,其中就有一部至今仍然非常火热的作品。
  • 整合网络营销是什么(网络营销的主要方式)
  • 2024-11-06网络营销的主要方式互联网推广时代,全网整合营销推广是砺前行的必要方式【发软文用TM媒介】在当今互联网信息大爆炸的时代,应运而生的网络成了财富的代名词,我们可以通过网络,覆盖整个网络,推广自己的品牌,树立企业形象,让更多。
  • 干香菇怎么泡不黄(干香菇怎么泡还用清水)
  • 2024-11-06干香菇怎么泡还用清水香菇还用清水泡?效果可不好,得用好方法嗨喽大家好,大家平时做菜的时候会用到干香菇么?有的朋友表示会用到,还有的朋友则表示这个干香菇无论怎么泡发都没有新买的那样饱满,所以一般来说能不用就不用,泡发不好的。
  • 职称评审表缺失原因怎么填(职称评审中至关重要的双表如何填写)
  • 2024-11-06职称评审中至关重要的双表如何填写评职称是一个浩大的工程,需要准备的东西很多,很多人就非常容易沉浸其中,最后晕头转向的不知道准备了什么,还差什么也不知道哪些是重点,哪些可以不用那么关注今天就重点给大家讲讲评职称中,有两个至关重要的表格。
  • 女子开车载情妇下车(男子车上有女人的香水味)
  • 2024-11-06男子车上有女人的香水味2012年12月25日深夜11点过,贵州省关岭附近的一个高速公路服务区内,一辆大客车缓缓驶了进来待车停下后,不少乘客都下了车,或上厕所、或买吃的,要不就伸个懒腰呼吸一下新鲜空气,一切看上去都那么的平静。
  • 汽车停车轮胎不回正有伤害吗(停车后轮胎不回正)
  • 2024-11-06停车后轮胎不回正相信很多朋友在学驾照的时候都听见过教练讲过这样一句话:停好车后一定要让轮胎回正,否者会对汽车造成伤害但可以肯定的是,很多朋友都是知其然不知其所以然,不知道停车轮胎为什么要回正以及不回正会对汽车造成哪些。
  • 印度高种姓婆罗门都是白人吗(印度最高种姓是婆罗门)
  • 2024-11-06印度最高种姓是婆罗门众所周知,我们中国提倡人人平等这在《宪法》第三十三条中已经明确指出:凡具有中华人民共和国国籍的人都是中华人民共和国公民中华人民共和国公民在法律面前一律平等并且我国也制定了一系列相关的法律来维护这项宪法。
  • 正规水费缴纳(您可以这样缴纳水费)
  • 2024-11-06您可以这样缴纳水费目前公安县银龙水务有限公司已升级营销系统,除各营业网点可正常缴费外,用户通过手机终端中国水务“指尖水务”支付宝也能正常缴纳水费,微信公众号缴费正在调试中,需延期开通缴费功能具体通知如下01如何变更及设。
  • 列维坦名作欣赏(观摩列维坦的名作春汛)
  • 2024-11-06观摩列维坦的名作春汛在这寒冬萧索的长夜里,窗外不时有呼呼得北风声,欣赏俄罗斯画家列维坦的名作《春汛》,从心底里回忆春的气息,真的是一件再惬意不过的事画上的春意具有俄罗斯情调阳春三月,稀疏的白桦树林开始受到春汛的泛滥,这在。
  • 下周大盘预测四连阳(周五大盘收评与9月26日下周一大盘预测)
  • 2024-11-06周五大盘收评与9月26日下周一大盘预测每晚马前炮预测隔天大盘走势,第二天盘后当场验证回顾:周时晚预测了周五大盘如果夜盘美股顺利止跌反弹的话,那么周五大盘大概率先会展开反弹走势了,上方压力位是3130点和3140点如果大盘还是反弹无量而无法。