1.延遲刪除
一條數據會被很多數據引用。當被引用的數據刪除時,引用的數據也需要刪除。這時候可以用延遲刪除的方法。
例子:
用戶發表的帖子,可以被轉發到很多地方。所有轉發過的貼都是對原帖的引用,用戶接著把他的原帖刪除,所有被轉發過的帖子也需要進行清理。我們采用的是延遲刪除的方法,用戶操作時,先直接刪除原帖,被轉發的貼,在點擊時,會到原帖加載內容,這時發現原帖已經不存在,此時這條被點擊的轉發貼也會被刪除。
當用戶訪問引用的數據時,發現被引用的數據不存在,此時刪除引用的數據。
2.線下刪除
一條數據關聯到很多數據。但這條數據是所有其他數據的入口。
例子:
一個QQ群里,會有很多內容,相冊,圖片等等。在解散QQ群時是不可能同步刪除和該群相關的所有數據的。此時可以用線下刪除的方法。先將QQ群的狀態置為inactive(解散)狀態。然后提交一條任務,在指定的時候將所有和該QQ群相關的數據都刪除。任務可以在系統負載比較低的時候觸發。因為QQ群的狀態已經被設置為inactive狀態,它也不會再被其他人訪問到。所有訪問需要加狀態進行判斷。
3.異步刪除
當某個系統的服務和其他系統的服務做了集成后,業務數據就可能是相互關聯的。當某個服務的數據被刪除時,需要通知相關聯的所有系統刪除和他相關聯的數據。
例子:
用戶會對他所加入的群進行了偏好設置,比如對某個群的評價,是否接收該群的通知等等。而這些數據是存在用戶系統(其他服務器)上的。當一個群組被解散時,無法同步地調用用戶系統的服務刪除所有的數據。因為一個群組可能有幾萬甚至更多的成員。此時可以用異步的方式通知用戶系統,群組系統發送一條“群解散”消息給用戶系統,用戶系統接收到消息后,會把所有相關聯的數據都清除。
延遲刪除結合使用:
如果數據量很大的話異步刪除也需要相當長的時間,這時可以結合使用延遲刪除的方法。
當用戶在用戶中心點擊某群的偏好設置時,系統發現該群組已經被刪除,就通知用戶該群不存在,并刪除相關的偏好設置。
線下刪除結合使用
數據量很大如果立即刪除會給系統突發地帶來相當大的負載,甚至可能會引起用戶訪問的響應率降低。這時需要采用線下刪除的方法,將刪除任務分割成很多很小的任務。分批地提交給系統定時處理。
4.不刪除
有些相關聯的數據,重要性很低,又有有效期。我們是不會再花費額外的代價去刪除它們的。
例子:
系統會記錄用戶的訪問足跡。用戶可以查詢他的這些訪問足跡。
您在2011.02.03在群組B(鏈接)回復了C(鏈接)發表的帖子D(鏈接)。
當B被解散或D被刪除后,不需要主動去清理這條數據。因為所有的訪問足跡都是有有效期的,當有效期到了的時候,這條數據就會被自動清除。
但是當D被刪除后,用戶點擊D鏈接會提示用戶404。