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