2016-11-22 76 views
0

我想了解在Cassandra中刪除後如何快速回收空間。我發現了很多描述墓碑的文章,以及當您進行範圍查詢時可能產生的問題,Cassandra必須掃描大量墓碑行才能找到更稀缺的活動文章。而且我知道你不能將gc_grace_seconds設置得太低,否則你將有殭屍記錄,如果一個節點脫機並在墓碑從其餘機器上消失後又回來了,殭屍記錄就會彈出。這一切都有道理。cassandra斑點,墓碑和空間回收

但是,如果墓碑放置在那麼它應該有可能回收其餘行數據的空間。

所以我的問題是,此表:

create table somedata (
    category text, 
    id timeuuid, 
    data blob, 
    primary key ((category), id) 
); 

如果我插入,然後刪除該表中的一些記錄,並注意不要碰到上述墓碑+範圍問題最後在其他地方,這些斑點的空間何時會被回收?

在我的情況下,斑點可能會大於推薦的大小(1mb我相信),但它們不應該大於〜15mb,我認爲它仍然可行。但是,如果所有這些blob粘貼10天(默認值爲gc_grace_seconds),並且只有這些密鑰粘貼10天才會產生巨大的空間差異。

當我看着我無法在任何地方找到這個特定的方面。

回答

1

gc_grace_seconds子句完成後,空間將被回收,並且您將有鍵和blob粘附。此外,如果您還有更新(這將是由創建時間戳的時間戳標識的相同記錄的不同版本)以及使用的複製因子(分佈的相同記錄的副本數量),您還需要考慮這可能會增加跨節點)。

在故障恢復和磁盤使用之間,您的設置(gc_grace_seconds,ttl,複製因子,一致性級別)的定製將取決於您的用例和需要滿足的SLA。

+0

gotcha。如果有重寫,那麼呢? (覆蓋blob值/列)在這種情況下是否有可能發生比gc_grace_seconds更早的壓縮將導致舊的blob被完全丟棄,因爲它現在已經被新的替換掉了? –

+0

不,不存在覆蓋,因爲記錄是不可變的,如果有更新的信息,Cassandra將創建一個帶有不同時間戳的新記錄,具有最新時間戳的記錄被視爲當前記錄,原始記錄將停留在gc_grace_seconds子句 –

+0

上定義的時間,謝謝 - 清除它。所以我猜想關鍵是要弄清gc_grace_seconds的值,這個值在你想要保留的時間之間保持一段距離,以正確處理離線的節點,然後再回來;以及將佔用多少額外的磁盤空間。 –