文档章节

走进cassandra之五 存储机制

chenkangyao
 chenkangyao
发布于 2016/07/19 13:39
字数 855
阅读 16
收藏 0
点赞 0
评论 0

有图有真相。
先上个图。
这个图总的意思就是说,
数据先写入内存中的Memtable,Memtable达到条件后刷新到磁盘,保存为SSTable,同一个CF的多个SSTable可以合并(Compaction)以优化读操作

commit log -> memtable -> sstable -> compaction.
看起来似乎有些麻烦,存个数据要这么多弯弯绕,但是记得,兄弟们,现在是应付海量数据,同时有很多节点,所以必须要走这么多弯路。

memtable是啥呢,所谓mem, mem,就是memory,内存,放在内存的table。
数据放内存有啥好处呢?
一个字: 快。
因为离CPU最近的,就是内存.

找数据的时候,先去内存里找,找不到再去硬盘找。
从硬盘上找东西的时候,要注意一点,因为硬盘比较矫情。
很容易发生i/o block。

为了应付这个矫情,cassandra找了Bloom兄弟来帮忙。
有个算法叫 Bloom Filter,
可以通过布隆过滤算法(Bloom Filter)减少对不可能包含查询key的SSTable的读取。

说了半天,啥是SSTable呢?
大家伙可以去自己硬盘上看一看:
 

SSTable包含对应的三种文件
Datafile
     按照Key排序顺序保存的数据文件
     文件名称格式如下:ColumnFamilyName-序号-Data.db
Indexfile
    保存每个Key在Datafile中的位置偏移
    文件名称格式如下: ColumnFamilyName-序号-Filter.db
Filterfile
    保存BloomFilter的Key查找树
    文件名称格式如下: ColumnFamilyName-序号-index.db

大家伙实际看下,估计能有个感观印象了。

sstable多了也占空间,麻烦,可以使劲压一压,压扁了,就不占那么大地儿了。
压扁的过程,在cassandra里面,叫compaction.

一个CF可能有很多SSTable,系统会将多个SSTable合并排序后保存为一个新的SSTable,称之为Compaction。
一次compaction最多请求合并32个SSTable,最少4个。超过32个则按时间排序分批进行(这两个阈值可以设置)。
如果空间不足,则尝试去掉最大的SSTable再合并,如果连合并两个最小的SSTable的空间都不足,则告警。
Major Comaction:合并CF的所有SSTable为一个新的SSTable,同时执行垃圾数据(已标记删除的数据tombstone)清理。
Minor Compaction:只合并大小差不多的SSTable,超过4个需要合并的SSTable就会自动触发。
可通过nodetool compact命令手动触发。
数据目录最好保持50%以上的可用空间。

就好像雷锋做了好事,要写在日记本上一样,咱凡事都有个log文件。
cassandra也有一个,叫 commitlog.

Commitlog是server级别的,不是Column Family级别的,每一个节点上的Commitlog都是统一管理。
每个Commitlog文件的大小是固定的,称之为一个CommitlogSegment,目前版本(0.7.0)中,这个大小是128MB,硬编码在代码中。
当一个Commitlog文件写满以后,会新建一个的文件。
SSTable持久后不可变更,故Commitlog只用于Memtable的恢复,相当于Oracle的Instance Recovery。Cassandra不需要做Media Recover
当节点异常重启后,将根据SSTable和Commitlog进行实例恢复,在内存中重新恢复出宕机前的Memtable。
当一个Commitlog文件对应的所有CF的Memtable都刷新到磁盘后,该Commitlog就不再需要,系统会自动清除

© 著作权归作者所有

共有 人打赏支持
chenkangyao
粉丝 4
博文 29
码字总数 36163
作品 0
广州
高级程序员
走进cassandra 之一 CAP和分布式

决定share一下我的cassandra学习成果,写一些博客,跟大家共同分享一下,准备写10篇文章,内容分别涉及 分布式存储概述及CAP, 数据模型, 分区器, 副本机制, 存储机制, 数据读写删, 最终一...

chenkangyao ⋅ 2016/07/19 ⋅ 0

Apache Cassandra 2.0 发布,K/V 存储系统

Apache 基金会宣布 Cassandra 2.0 正式版本发布了。该版本包含轻量级事务处理机制、触发器和 CQL (Cassandra Query Language) 增强,大大提升了在开发流行的、数据驱动的应用上的效率。 Apac...

oschina ⋅ 2013/09/05 ⋅ 8

走进cassandra之六 数据读写删

先说写,再说读,最后说 数据一致性(data consistency)。 cassandra对于 数据写入,那是相当给方便的,比对 首长儿子还亲呢, 写的相当快,相当高效。 相比来说,关系型数据库,对于数据 ...

chenkangyao ⋅ 2016/07/19 ⋅ 0

Cassandra维护最终一致性 和存储机制 分区策略

维护最终一致性 Cassandra 通过4个技术来维护数据的最终一致性,分别为逆熵(Anti-Entropy),读修复(Read Repair),提示移交(Hinted Handoff)和分布式删除。 1) 逆熵 这是一种备份之间的...

Will--wang ⋅ 2015/05/26 ⋅ 0

如何实现节点间数据同步

Apache Cassandra3.X 系列,第 4 部分 如何实现节点间数据同步 周 明耀 2017 年 12 月 06 日发布 系列内容: 此内容是该系列 6 部分中的第 # 部分: Apache Cassandra3.X 系列,第 4 部分 ht...

周 明耀 ⋅ 2017/12/06 ⋅ 0

snowflake——Twitter 开源的分布式自增 ID 算法

Twitter在把存储系统从MySQL迁移到Cassandra的过程中,由于Cassandra没有顺序ID生成机制,于是自己开发了一套全局唯一ID生成服务:Snowflake。优点是:高性能,低延迟;独立的应用;按时间有...

oschina ⋅ 2016/07/04 ⋅ 0

cassandra architecture

Apache Cassandra是一个开源的、分布式、无中心、弹性可扩展、高可用、容错、一致性可调、面向列的数据库,它基于Amazon Dynamo的分布式设计和Google BigTable的数据模型。 分布式无中心 可以...

Jun_Wong ⋅ 01/10 ⋅ 0

走进cassandra之七 最终一致性

关于这个最终一致性,我们还是举打仗的那个例子。 一个师,下辖三个团,一个独立营。 大家知道,在战斗的时候,突发事件很多,时间也很紧迫。 来自师部的作战命令,可能没有办法及时到达各个...

chenkangyao ⋅ 2016/07/19 ⋅ 0

走进cassandra之三 分区器

从这节开始,都是高年级知识了,需要一点分布式的基础知识。 以前的文章说到, james(公司大佬)把任务分给了几拨人来做,那么怎么个分法呢? 什么任务交给什么人呢? James估计是有自己的一...

chenkangyao ⋅ 2016/07/19 ⋅ 0

走进cassandra之四 副本机制

如果你要想最大限度保持一个东西不会忘记掉,你最好的办法,不是死记,记好几十遍。 而是要告诉几个人,这样就算你忘记了,别人还记得。 在cassandra里面呢,这个原理可以描述为 Replicatio...

chenkangyao ⋅ 2016/07/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

解决CentOS6、7,/etc/sysconfig/下没有iptables的问题

一、Centos 6版本解决办法: 1.任意运行一条iptables防火墙规则配置命令: iptables -P OUTPUT ACCEPT 2.对iptables服务进行保存: service iptables save 3.重启iptables服务: service ...

寰宇01 ⋅ 22分钟前 ⋅ 2

数据库备份和恢复

备份:mysqldump -u root -p 数据库>磁盘路径 恢复:mysql -u root -p 数据库<sql脚本的磁盘路径

anlve ⋅ 今天 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 今天 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部