Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4450571
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类: 大数据

2014-05-19 17:55:58

文章来源:http://www.cnblogs.com/gpcuster/archive/2010/05/27/1745859.html

在《如何安装和配置Cassandra》中,我们可以在DataFileDirectories中配置数据的存放位置。

当Cassandra启动后,向其中插入的数据就会放在DataFileDirectories的目录下,如图:

image

这里有2个Column Family,分别是Standrad1,Super1。

大家可以想象,如果没有压缩功能的话,那么随着数据量的增加,DataFileDirectories目录中的文件会越来越多。

在Cassandra中的压缩功能避免了在DataFileDirectories目录中存在大量的数据文件。

设置压缩参数

当Cassandra启动以后,我们可以使用sh bin/nodetool –h hostname –p jmxport getcompactionthreshold 获得到当前Cassandra的压缩参数:最小压缩值,最大压缩值。

我们也可以使用sh bin/nodetool –h hostname –p jmxport setcompactionthreshold minthreshold maxthreshold的命令设置Cassandra的最小压缩值和最大压缩值。

手工关闭压缩功能

为了测试,我们可以先将压缩功能关闭,执行如下命令即可:sh bin/nodetool –h hostname –p jmxport setcompactionthreshold 0 0

执行完这个命令,Cassandra的压缩功能就关闭了,当我们插入大量数据以后,你会发现在DataFileDirectories目录下出现了大量的数据文件。

手工启动强制压缩

在上一步中,我们关闭了压缩,这样做的好处是可以提高大数据量导入的速度(后面会介绍到这个问题)。但是缺点是导致DataFileDirectories目录下出现了大量的数据文件。

如果想将这些数据文件压缩。我们可以执行如下命令: sh bin/nodetool –h hostname –p jmxport  compact

当执行完这个命令后,Cassandra会将不同的Column Family文件分别合并成一个文件。合并的顺序是按照数据文件产生的时间先后顺序进行合并的。

正常的压缩流程

由于Cassandra的压缩参数是无法在配置文件中设定的,所以每次启动Cassandra,都会使用默认的参数:最小压缩值 4,最大压缩值 32。

压缩操作会在已下2个场景中使用:

Cassandra启动

当Cassandra启动的时候,会执行压缩操作:遍历每一个CF的文件数量,如果超过了最小值4,那么就会求一个平均值( (4 + 32)/2 ),然后按照数据文件产生的时间先后顺序排序,取这个平均值和实际文件数量的较小的数来做一个文件的合并操作。

有新的SSTable文件需要写入磁盘

当memtable中的数据达到阀值时(这个阀值的大小可以在配置文件中指定),将会产生一个新的SSTable文件。这个时候,系统就会进行上面“Cassandra启动”的逻辑进行判断,是否需要进行压缩操作,如果需要进行压缩操作,哪些文件就会被合并。

 

以上介绍的这些就是Cassandra中压缩操作的工作情况。更多的详细信息可以参考org.apache.cassandra.db.CompactionManager。

希望这篇文章能帮助你理解Cassandra中的压缩操作。

阅读(658) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~