我有一個有expiry_date的模型發佈。我想知道在這種情況下管理可伸縮性的最佳方式是什麼。 2種選擇:移動過期物品?
每當我想從表中選擇,我需要包括其中 EXPIRY_DATE> NOW。如果桌上的帖子長得像一個怪物,我會在 麻煩。想象3年或更長時間後。索引也會很大。
有一個觸發器,cron作業,或插件(如果存在的話),這將繞過桌子 和移動過期的項目到新表Post_Archive。 這樣,我保持我的主表,這意味着 目前唯一的職位,3年以上如果需要歸檔在連續的基礎上的數據(我不會像選擇1
我有一個有expiry_date的模型發佈。我想知道在這種情況下管理可伸縮性的最佳方式是什麼。 2種選擇:移動過期物品?
每當我想從表中選擇,我需要包括其中 EXPIRY_DATE> NOW。如果桌上的帖子長得像一個怪物,我會在 麻煩。想象3年或更長時間後。索引也會很大。
有一個觸發器,cron作業,或插件(如果存在的話),這將繞過桌子 和移動過期的項目到新表Post_Archive。 這樣,我保持我的主表,這意味着 目前唯一的職位,3年以上如果需要歸檔在連續的基礎上的數據(我不會像選擇1
壞你的#2)而不是一個好的選擇是MaatKit。
它可以「蠶食」掉在大塊數據,而不是運行的佔用大量資源的質量查詢(和避免污染的關鍵緩存)。
所以是的,你會從cron運行一個Maatkit作業。與此同時,如果你想同時做#1,你可以實現一個視圖,方便地包裝「WHERE expiry_dat> NOW」條件,所以你不必將它全部包含在你的代碼中。
一個cron作業聽起來不錯,並且它可以通過直接將一個簡單的腳本到mysql
命令來完成,例如,大致爲:
CREATE TEMPORARY TABLE Moving
SELECT * FROM Post WHERE expiry > NOW();
INSERT INTO Post_Archive
SELECT * FROM Moving;
DELETE FROM Post
WHERE id IN (SELECT id FROM Moving);
DROP TEMPORARY TABLE Moving;
Maatkit是一個很好的指針,謝謝 - MK-歸檔是一個非常複雜的工具,但是http://www.xaprb.com/blog/2006/05/02/how-to-write-efficient-archiving-and-purging-jobs-in-sql/上的一篇配套文章解釋了「操作原理」及其背後的思想以非常有益的方式 - 再次感謝我帶領我去找到它!) - – 2009-05-24 18:10:31