Cassandra數(shù)據(jù)是怎么刪除的?

Cassandra的刪除數(shù)據(jù)的操作,被設(shè)計用于提高性能,并與Cassandra的內(nèi)置屬性配合使用以進(jìn)行數(shù)據(jù)分配和容錯。

Cassandra將刪除視為插入或upsert(注:Update和Insert的組合語義)操作。

這個DELETE命令實際是在分區(qū)的數(shù)據(jù)塊中寫入了一條數(shù)據(jù),這個數(shù)據(jù)是一個刪

除標(biāo)記,我們稱之他為墓碑(tombstone)。墓碑通過寫操作將數(shù)據(jù)寫到一個或

者多個數(shù)據(jù)節(jié)點的SSTables中。碑的主要區(qū)別特征是它有一個內(nèi)置的過期時間。在截止時間結(jié)束時(詳情見下文),Cassandra在執(zhí)行compaction 操作的過程中墓碑將被刪除。

您還可以用生存時間值(TTL)標(biāo)記Cassandra記錄(行或列)。在這段時間結(jié)束之后,Cassandra將用墓碑標(biāo)記記錄他們,這些被標(biāo)記的數(shù)據(jù)的處理方式和其他墓碑記錄一樣。

分布式系統(tǒng)中的刪除操作

在多節(jié)點集群中,Cassandra可以在兩個或多個節(jié)點上存儲相同數(shù)據(jù)的副本。這有助于防止數(shù)據(jù)丟失,但會使刪除過程復(fù)雜化。如果一個節(jié)點接收到本地存儲的數(shù)據(jù)的刪除,則該節(jié)點將刪除指定的記錄,并嘗試將該刪除操作(墓碑)傳遞到包含該記錄副本的其他節(jié)點。但是如果當(dāng)時有一個副本節(jié)點沒有響應(yīng),它不會立即收到刪除命令,所以它的數(shù)據(jù)版本仍然處于刪除操作之前的版本。如果在該節(jié)點恢復(fù)正常之前而其他節(jié)點將墓碑記錄刪除掉了,那么Cassandra會將恢復(fù)的節(jié)點上那些記錄(注:這些記錄就是那些被刪除的數(shù)據(jù),因為該節(jié)點沒有收到刪除操作‘墓碑’)作為新數(shù)據(jù)處理,并將其傳播到群集的其他節(jié)點。這種行為產(chǎn)生的數(shù)據(jù)被稱為僵尸數(shù)據(jù)。

為了防止僵尸的再現(xiàn),Cassandra給每個墓碑一個寬限期(注:相當(dāng)于貸款中說的寬限期)。寬限期的目的是給予無響應(yīng)的節(jié)點恢復(fù)和正常處理墓碑的時間。如果客戶端在寬限期內(nèi)向墓碑寫入新的更新,Cassandra會覆蓋之前的墓碑值。

如果客戶端在寬限期內(nèi)為該記錄發(fā)送讀取,Cassandra會忽略墓碑,如果其他節(jié)點可用話他會去其他副本獲取數(shù)據(jù)。

當(dāng)無響應(yīng)的節(jié)點恢復(fù)時,Cassandra將通過hinted handoff操作來重演該節(jié)點在故障期沒接收到的數(shù)據(jù)更新。 Cassandra在其寬限期內(nèi)不會重演這個墓碑里的數(shù)據(jù)。但是,如果節(jié)點在寬限期結(jié)束之后才恢復(fù)的話,則Cassandra可能會丟失刪除操作(就會導(dǎo)致刪除的數(shù)據(jù)重現(xiàn))。

墓碑的寬限期結(jié)束后,Cassandra在壓實過程中會刪除墓碑。

邏輯刪除的寬限期由屬性gc_grace_seconds設(shè)置。它的默認(rèn)值是864000秒(十天)。每個表都可以有自己的屬性值。

更多關(guān)于Cassandra刪除

詳細(xì)資料:

l 墓碑的到期時間是指數(shù)據(jù)的創(chuàng)建的時間加上表屬性gc_grace_seconds的值。

l Cassandra還支持批量數(shù)據(jù)插入和更新。這個過程介紹了其他節(jié)點刪除的數(shù)據(jù)在重演的時候重新insert的危險。Cassandra不會重演一個在寬限期內(nèi)的墓碑里記錄的數(shù)據(jù)。

l 在單節(jié)點集群上,可以將gc_grace_seconds設(shè)置為0(零)。

l 為了完全防止僵尸數(shù)據(jù)的再現(xiàn),在節(jié)點恢復(fù)后在節(jié)點上運行nodetool repair 命令,這個命令的執(zhí)行時間必須是每個表的gc_grace_seconds時間內(nèi),不能超期。

l 如果表中的所有數(shù)據(jù)在創(chuàng)建時都被賦予TTL,并且所有數(shù)據(jù)都被允許過期自動刪除而不是手動刪除,則不需要定期為該表運行nodetool repair 命令。

l 如果使用SizeTieredCompactionStrategy或DateTieredCompactionStrategy這兩種壓縮方式,則可以通過手動啟動壓縮過程來立即刪除墓碑。

警告

如果強(qiáng)制壓縮,Cassandra可能會從所有數(shù)據(jù)中創(chuàng)建一個非常大的SSTable。 Cassandra不會長時間觸發(fā)另一個壓縮。強(qiáng)制壓縮過程中產(chǎn)生的SSTable中的數(shù)據(jù)在非壓實期間會變得非常陳舊。

l Cassandra允許您為整個表設(shè)置default_time_to_live屬性。標(biāo)有常規(guī)TTL的列和行如上所述進(jìn)行處理;但是當(dāng)記錄超過表級TTL時,Cassandra會立即刪除它,而不會進(jìn)行邏輯刪除或壓縮。

Cassandra支持通過DROP KEYSPACE和DROP TABLE語句立即刪除。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容