介绍Cassandra中的压缩

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

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

介绍Cassandra中的压缩_第1张图片

这里有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中的压缩操作。

你可能感兴趣的:(介绍Cassandra中的压缩)