2014-10-29 53 views
3

我對使用Cassandra很有新意,並有一個基本問題,我正在尋求答案。我正在使用大小分層的默認壓縮策略。我知道,這是可以改變的,以拉平壓實戰略,運行如下命令:卡桑德拉壓實策略可以動態改變嗎?

ALTER TABLE users WITH 
compaction = { 'class' : 'LeveledCompactionStrategy' } 

不過,我如果這種改變需要生效在運行時在一個特定的密鑰空間,或者如果我需要不確定重新啓動節點以使更改生效。我在Datastax文檔(http://www.datastax.com/documentation/cassandra/1.2/cassandra/configuration/configCassandra_yaml_r.html)中看過,cassandra.yaml文件中的全局配置更改僅在節點重新啓動後生效,並且想知道是否也適用於特定於鍵空間的屬性(如壓縮策略)。

在此先感謝您的幫助。

回答

2

有關configuring compaction的較新文檔指出啓用「水平壓實」的正確步驟是您上面的ALTER TABLE聲明。雖然對cassandra.yaml文件的更改需要重新啓動節點才能生效,但表配置更改通常不會。在下一次壓縮觸發時,它應該對該表使用「水平壓實」。

此外,您應該通讀泰勒霍布斯的文章標題爲When to Use Leveled Compaction。既然你是Cassandra的新手,那麼只需要確保你有一個合適的用例。

+1

感謝您的快速回復布萊斯。我確實看過你幾小時後發佈的文章:)並且我認爲我們確實有一個強大的用例,它基於以下事實: 1)雖然Cassandra通常寫入最優,但我們有一個具有高讀寫比的用例。 2)讀取延遲對我們同樣重要。 3)除了寫入外,我們還經常更新數據。 這就是說,我仍然需要完全評估這一點,並且在向我的團隊提出這個建議之前,需要自己收集所有事實(我正在做的是這些事情)。 – Rohit 2014-10-29 21:23:00

+0

另外,有沒有一種方法可以翻轉策略,並驗證它實際上是否使用了正確的策略,除了實際進入並檢查SS表的大小等。 – Rohit 2014-10-29 21:35:15

+0

@Rohit這是一個很好的問題,我不知道如果有。在日誌或'nodetool compactionstats'的輸出中沒有出現任何東西來指示正在使用哪種壓縮策略。 – Aaron 2014-10-29 21:46:03

0

您可以在線修改壓實策略。 Cassandra將重新組織所有sstables,因此只關心磁盤I/O。 2.1之前版本,舊的sstable僅在新的sstable創建後才被替換。 2.1之後,新的sstable可以在創建過程中提供流量(主要用於保存頁面緩存,請參閱CASSANDRA-6916)。所以基本上,你的流量不會受到影響。

我知道一些公司,例如netflix通過主機通過jmx主機執行此更改,以防止集羣範圍內的雷雨天氣。但我沒有看到我們的集羣ALTER TABLE有任何問題。