Cassandra 如何刪除數據


如何刪除數據?

刪除數據的過程旨在提高性能,並與Apache Cassandra™(DDAC)數據庫的DataStax Distribution內置屬性(用於數據分發和容錯)一起使用。

數據庫將刪除視為插入或向上插入DELETE命令中添加到分區的數據是一個刪除標記,稱為邏輯刪除邏輯刪除通過寫路徑,並被寫入一個或多個節點上的SSTables中。邏輯刪除的一個關鍵區別是由gc_grace_seconds設置的內置有效期,稱為寬限期在其有效期結束時,該墓碑將作為常規壓實過程的一部分被刪除

生存時間(TTL)值標記記錄(行或列)表示在指定時間結束時,數據庫用邏輯刪除標記該記錄,並像處理其他邏輯刪除的記錄一樣處理該記錄。

 

 

分布式系統中的刪除

在多節點集群中,Cassandra 數據庫可以在兩個或多個節點上存儲相同數據的副本。這有助於防止數據丟失,但會使刪除過程復雜化。如果節點收到對其本地存儲的數據的刪除,則該節點會將指定的記錄標記為刪除,然后嘗試將邏輯刪除傳遞給包含該記錄副本的其他節點。如果此時一個副本節點無響應,則它不會立即收到該邏輯刪除,因此它仍包含記錄的預刪除版本。如果邏輯刪除已在該節點恢復之前從集群的其余部分刪除,則數據庫會將恢復的節點上的記錄視為新數據,並將其傳播到集群的其余部分。這種已刪除但持久的記錄稱為僵屍

為了防止僵屍再次出現,數據庫為每個墓碑提供了寬限期寬限期的目的是使無響應的節點有時間恢復和正常處理邏輯刪除。當多個副本答案是讀取請求的一部分,並且這些響應不同時,則以最新的值為准。例如,如果一個節點具有邏輯刪除,但另一個節點具有較新的更改,則最終結果將包括較新的更改。

如果一個節點具有邏輯刪除,而另一個節點的記錄只有較舊的值,則最終記錄將具有邏輯刪除。如果客戶端在寬限期內將新更新寫入邏輯刪除,則數據庫將覆蓋邏輯刪除。

當無響應的節點恢復時,Cassandra使用提示的切換來重播該節點關閉時丟失的數據庫突變Cassandra不會在寬限期內重播墓碑的變異。如果該節點直到寬限期結束后才恢復,則可能會錯過刪除操作。

邏輯刪除的寬限期結束后,Cassandra會在壓縮過程中刪除該邏輯刪除。

 

有關刪除的更多信息

邏輯刪除的寬限期由gc_grace_seconds屬性設置默認值為864,000秒(十天),並且每個表可以為此屬性設置其自己的值。在單節點群集上,可以將該屬性安全地設置為零。

  • 邏輯刪除的到期日期/時間是其創建的日期/時間加上gc_grace_seconds屬性的值
  • 為了完全防止僵屍記錄再次出現,請在節點恢復后在節點上運行nodetool repair,並在每個表上按gc_grace_seconds設置的每個間隔運行

如果表中的所有記錄在創建時都被賦予了TTL,被允許過期且未被手動刪除,則無需定期對該表運行nodetool repair欲了解更多信息,與TTL到期數據,請參見與TTL過期的數據

如果使用 SizeTieredCompactionStrategy(STCS) ,請通過 手動啟動 壓縮過程立即刪除過期的墓碑
注意:如果強制執行壓縮,則數據庫可能會從所有數據中創建一個非常大的SSTable,並且很長一段時間不會觸發另一次壓縮。在長時間的非壓縮期間,在強制壓縮期間創建的SSTable中的數據會變得非常陳舊。

Cassandra還支持批量數據插入和更新此過程帶來了在從集群的其余部分刪除記錄后重播記錄插入的危險。Cassandra不會重播仍處於寬限期內的墓碑的批量突變。

Cassandra支持通過DROP KEYSPACEDROP TABLE語句立即刪除

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM