介绍Cassandra中的压缩
在《如何安裝和配置Cassandra》中,我們可以在DataFileDirectories中配置數據的存放位置。
當Cassandra啟動后,向其中插入的數據就會放在DataFileDirectories的目錄下,如圖:
這里有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的文章:http://www.cnblogs.com/gpcuster/tag/Cassandra/
總結
以上是生活随笔為你收集整理的介绍Cassandra中的压缩的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如此智能的Windows Embedde
- 下一篇: Microsoft二任CEO业绩对比,说