问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Cassandra实战 笔记-《Cassandra内部数据存储结构》

发布网友 发布时间:2023-06-05 04:45

我来回答

1个回答

热心网友 时间:2023-10-07 05:26

Cassandra的配置文件可以对Cassandra中的数据进行配置。cassandra.yaml 中关于存放数据信息的配置如下:

数据信息一共分为以下3类:

在data目录下,Cassandra 会将每一个 Keyspace 中的数据存储在不同的文件目录下,并且 Keyspace 文件
目录的名称与 Keyspace 名称相同。

假设有两个 Keyspace,分别为 ks1 和 ks2,但在 data目录下,将看到3个不同的目录:ks1,ks2和 system。其中 ks1 和 ks2 用于存储系统定义的两个 Keyspace 的数据,另外一个 system 目录是 Cassandra 系统默认的一个 Keyspace,叫做 system,它用来存储 Cassandra 系统的相关元数据信息以及 HINT 数据信息。

当 Cassandra 有数据需要更新时,第一个记录这个更新的地方就是 Commitlog。
Commitlog由如下两个部分构成:
CommitLog - xxx.log 、 CommitLog - xxx.log.header 。

在 CommitLog - xxx.log 文件中,保存了每一次更新操作的值。
在 CommitLog - xxx.log.header 文件中,记录了哪些数据已经从 memtable 中写入 SSTable 中。

通过log. header文件中记录的元数据信息, Cassandra 可以及时删除不必要的Commitlog文件,减少磁盘的占用量,并在Cassandra重启时,加快从Commitlog中恢复数据的速度。

Commitlog文件的大小可以在配置文件中指定,默认是128MB。

当一个Commitlog文件大小超过设置的阈值后,将会新建一个Commitlog,并将更新数据写人这个新的文件中。

Cassandra提供了两种记录Commitlog的方式:周期记录( periodic)和批量记录( batch)。如果使用周期记录的方式,需要在配置文件进行如下配置:

Cassandra会每次更新信息将写人 Commitlog 中,并且每隔一定的时间间隔( commitlog-sync_ period in ms )调用 org apache. cassandra. io. util. BufferedRandomAccessFile. syne() 同步 Commitlog 文件。

如果使用批量记录的方式,需要在配置文件进行如下配置:

Cassandra会缓存每次更新信息,每隔一定的时间间隔( commitlog sync_ batch _window_in_ ms )调用 org. apache. cassandra. io. util. BuferedRandomAccessFile. syne () 同步Commitlog 文件,最后将之前缓存的更新信息写人Commitlog中。

如果不允许数据丢失,可以使用周期的方式记录 Commitlog。如果写入数据量非常大,同时可以承担由于机器可能宕机导致的数据丢失的风险,则使用批量记录的方式记录 Commitlog。

在实际的使用中,可以根据情况来选用合适的 Commitlog记录方式。

数据写入 Commitlog 后,将缓存在 Memtable 中。

Cassandra 中每一个 Memetable 只为一个 ColumnFamily 提供服务。

当下面3个条件中任意个满足后,会将Memtable中缓存的数据写入磁盘,形成一个SSTable文件。

上面提到的3个参数都可以在配置文件中进行设置,Cassandra 为每一个ColumnFamily提供单独的配置。

每当有数据进人 Memtable 中时,会将数据保存到成员变量 ColumnFarmilies 中,并解析这个数据,排除重复或者是已经过期的数据。具体实现如下:

当Cassandra需要将Memtable中缓存的数据写人磁盘时,会按照内存中Key的顺序写人SSTable中。

使用 Memtable 的优势在于:将随机 IO 写变为顺序 IO 写,降低大量的写操作对存储系统的压力。

Cassandra 中的 Memtable 会缓存客户端写入的数据,当Memtable中缓存的某一个ColumnFamily中的数据量( 对应配置文件中的 memtable_ throughput_ in mb 和 memtable_ operations_in_ millions 或者超过上一次生成SSTable的时间(对应配置文件中的 memtable flush_ after_mins )后,Cassandra 会将Memtable中对应的ColumnFamily的数据持久化到磁盘中,生成一个SSTable文件。

如ColumnFamily名称为Cfl的一个SSTable文件由如下文件组成:

其中,“Cf1”为ColumnFamily的名称;“e” 为版本的标识(这个标识在0.7之前的版本中是没有的);“1”代表这是名称为Cfl的ColumnFamily的第一个SSTable,这个数字会随着新的SSTable文件的生成不断增加;“Data”、“Filter”、 “Index"和“Statistics" 分别代表 SSTable 4个不同组成部分,它们的作用各不相同。

在Cassandra中,除了用户自己定义的 Keyspace 之外,还有一个特殊的 Keyspace :名称为system的系统表空间。
用户不能在 Cassandra 中创建名为 system 的 Keyspace,只能由 Cassandra 系统自动创建。系统表空间的主要有以下两个作用:

如果系统首次启动,Cassandra 将会自动在data目录下创建系统表空间,并将系统元数据信息存放在系统表空间中。以后启动的过程中,Cassandra 将会直接从系统表空间中读取系统元数据信息。

如果 Cassandra 发现某一个节点宕机,就会将发送给宕机节点的数据以 HINT 的形式发送给另外台 Cassandra 服务器。接收到 HINT 数据的 Cassandra 服务器将数据缓存到系统表空间中,当其发现宕机的 Cassandra 恢复后,将缓存 HINT 数据发送给恢复的服务器,完成数据传输后,将缓存的 HINT 数据从系统表空间中删除。

本章从原理上分析和讲解了 Cassandra 的内部数据存储结构Commitlog、Memtable、SSTable和构成SSTable的4个子文件。了解Cassandra的内部数据存储构造有利于为基于Cassandra的应用程序设计合理的数据模型,以及找出造成读写瓶颈的原因。另外还介绍了Cassandra的系统表空间,了解了整个系统元数据管理的机制。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中控是什么意思 抖音直播中控是什么意思 iphone通讯录群组设置 如何更改iphone通讯录拨打电话时总是出现两个称呼 我的电脑是Win8.1update老硬盘有坏道,最近新买了一个硬盘是希捷的1TB混 ... 使命召唤:黑色行动2常见问题 GMA 4500M技术特性 电脑显示器的配置电脑的基本配置有哪些 梦见对象把门钥匙和我分手 梦见对象还我门钥匙要和我分手的预兆 公益性捐赠税前扣除资格 微信收藏标签如何删除 这段时间一吃硬东西就会牙齿疼 一吃硬的东西嗓子就胀胀的难受像有股气憋着硬硬的怎么回事 一吃硬的东西胃就往死疼是咋么回事 一吃硬的就咬肌酸疼 一吃硬东西牙就疼能不能治好? 我一吃硬东西或吃凉东西就总是牙疼,是怎么回事啊,应该怎么办啊 ? 一吃硬的东西就肚子疼 一吃硬的东西牙就疼两天左右,什么情况? 请问一下,基因的自由组合有什么技巧吗?关于基因重组。基因突变。是什么啊 誉芙美修红精华液怎么样 海尔电视机待机红亮一闪一闪的怎么回事 电视待机灯一直闪是怎么回事 全城热恋马哥牵手是第几集 全城热恋的立英结婚没 全城热恋14号立英现状 吉林台全城热恋吕拓牵手的那集 我老公是个实在人,总觉得亏欠他家里,怎么办? 为什么男人自己的父母什么都不做,还说父母辛苦,媳妇累死,还说没做事? 家庭中,孩子不欠父母哪些“东西”,很多家长却不知道? cassandra什么意思 Cassandra-python Write-Ahead Log (预写日志) 中国1998年至今发生了哪些灾害(包括非典、h1n1等非自然灾害)? 怎样才能照看好小孩子呢? 如何安全地照看孩子? 如何照看好小孩? 我要如何照看孩子? 如何在公司照看孩子? 信用卡逾期能不能办卡了 giftsandhome什么意思 My family mambers are father mother and I,为何不是me? and i 为何不是and me? 如何画简单的多肉植物 你想加入什么俱乐部 web前端入门视频教程在哪可以看到? 为什么每当我回忆起初中或者以前的时光总觉得心里有一种酸酸,还有心塞的感角,难受到无法呼吸。怎么会这 543丹东号护卫舰 30系显卡id不匹配 柯南好看的集数是那几集? solidworks中已打开的文档ID与参考文档内部ID不匹配是怎么回事