Cassandra SizeTieredCompaction策略解析

Cassandra SizeTieredCompaction策略解析

国内研究使用Cassandra的似乎并不多,远没有Hbase那般火热。偏巧,我就在这块儿并不火热的地方,耕耘了一年多。这一年,有深入研究,有实际运维。我打算把这些东西总结出来(前面也写了一些),希望对后来使用的同学有帮助。而且,

我坚信,使用Cassandra的团队会越来越多。

这篇博客我来解释以下SizeTiered策略,这是一个Cassandra1.0之前的比较简单的Compaction策略。我之前的博客有粗略讲过leveled策略(后面会找时间丰富以下)。SizeTiered策略比较简单,可是尽管简单,如果不深入代码,在实际运维的时候,还是会出现异常现象而无法解释,找不到解决办法。SizeTiered策略的主要内容在类SizeTieredCompactionStrategy中,继承了AbstractCompactionStrategy类。 这里还要说明以下,Cassandra1.1前后的SizeTiered策略也是不同的,API也有变化,在1.1之前,叫做getBackgroundTasks方法,在1.1以后,叫做getNextBackgroundTask。他们的主要差别在于1.1之前,会对每个tier进行计算,满足条件,就会就进行Compaction,所以,会同时有多个tier参与到Compaction中;而1.1之后,是优先处理低tier的数据进行Compaction,也就是文件比较小的那些tier。这样做的好处有:

  1. 加速Compaction操作,减少文件数量
  2. 降低Compaction带宽,从而可以降低对读性能的影响
  3. 更加适宜更新频繁的应用场景

真心不会写源码阅读类的博客,我还是罗列一些比较重要的点吧,我尽量提到代码中的类名,方法名可以对照分析:

  1. 两个比较重要的参数:MinimumCompactionThreshold, MaximumCompactionThreshold。当每一个tier的文件数量,大于前者的时候,可以参与到Compaction中,但是参与Compaction的文件数量,不会超过后者。前者默认是4,后者默认是32.
  2. 划分tier的依据是sstable文件的大小,具体在函数getBuckets中,比如有一个1G的sstable,大于0.5G的和小于1.5G的,都可以划到一个tier中。而leveled是将level写在json文件中的
  3. 每次Compaction都是写入时间比较久的sstable优先参与合并的
  4. 一个问题,如果要合并的sstable文件,大于磁盘剩余空间怎么处理?这个要看CompactionTask中的execute方法,方法首先会判断,空闲空间是否足够。有一个比较重要的方法partialCompactionsAcceptable,含义是:是否允许部分的sstable参与到Compaction中。SizeTiered只要不是手工启动的Compaction操作,这个函数都是返回true。而leveled永远是false。当采用SizeTiered策略,磁盘剩余空间不足的时候,会删除大小最大的文件,再进行判断。直到满足剩余空间大小为止。

总的来说,SizeTiered策略比较简单,主要特点就是快。了解了上面这些点,在实际优化,运维中,我想就会得心应手。 【完】    

转载于:https://www.cnblogs.com/sing1ee/archive/2012/06/26/2765047.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110378.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 移动手机app开发

    移动手机app开发App开发,是指专注于手机应用软件开发与服务。App是application的缩写,通常专指手机上的应用软件,或称手机客户端。另外目前有很多在线app开发[1]平台,比如应用之星平台很好用。App开发,是指专注于手机应用软件开发与服务。App是application的缩写,通常专指手机上的应用软件,或称手机客户端。苹果公司的Appstore开创了手机软件业发展的新篇章,使得第三方软

    2022年5月9日
  • vue页面刷新_vue强制重置组件

    vue页面刷新_vue强制重置组件vue页面刷新首先我们都知道vue属于单页面应用,默认境况下是不会触发刷新页面操作的,所以这个时候就需要我们通过事件来触发reload()来达到刷新操作接下来我就为大家介绍三种刷新页面的方法1.wiindow.location.reload([bForceGet])该方法强迫浏览器刷新当前页面bForceGet可选参数,默认为false,从客户端缓存里取当前true,则以get方式,从服务器端获取最新的页面,相当于页面f5刷新wiindow.location.replace(URL)

    2022年10月16日
  • pycharm和python idle区别_python新手入门使用自带的IDLE、用pycharm还是visual studio ?…[通俗易懂]

    pycharm和python idle区别_python新手入门使用自带的IDLE、用pycharm还是visual studio ?…[通俗易懂]绝对是VisualStudioCode不信?看图呗输入关键字立马知道用法导入库时有库名提示使用函数的时候有参数提示各种快捷键让你如虎添翼主题随心换更有丰富的扩展以文件夹为单位的项目管理时间线让你清楚地了解代码的变动结合git工具完美地进行项目管理你说,我不用VisualStudioCode用谁呢?什么?你说Pycharm?Pycharm有我VisualStudioCode好看吗?什么…

    2022年8月26日
  • html5自学教程_html和html5学哪个

    html5自学教程_html和html5学哪个HTML5作为下一代网站开发技术,无论你是一个Web开发人员或者想探索新的平台的游戏开发者,都值得去研究。借助尖端功能,技术和API,HTML5允许你创建响应性、创新性、互动性以及令人惊叹的

    2022年8月6日
  • 相机标定基础

    相机标定基础一.什么是摄像机标定从二维图像中恢复物体的三维信息,必须要知道空间坐标系中的物体点同它在图像平面上像点之间的对应关系,而这个对应关系是由摄像机的成像几何模型所决定的,这些几何模型参数就是摄像机参数。在大多数情况下这些参数必须通过实验才能得到,这个过程被称为摄像机标定。摄像机标定就是确定摄像机内部几何和光学特性(内部参数)以及摄像机坐标系相对于世界坐标系的三维位置和方向(外部参数)的过程。

    2022年5月11日
  • AD域资料介绍

    AD域资料介绍一、什么是AD?活动目录(ActiveDirectory)是面向WindowsStandardServer、WindowsEnterpriseServer以及WindowsDatacenterServer的目录服务。(ActiveDirectory不能运行在WindowsWebServer上,但是可以通过它对运行WindowsWebServer的计…

    2022年5月15日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号