2009-05-24 67 views
1

我有一個有expiry_date的模型發佈。我想知道在這種情況下管理可伸縮性的最佳方式是什麼。 2種選擇:移動過期物品?

  1. 每當我想從表中選擇,我需要包括其中 EXPIRY_DATE> NOW。如果桌上的帖子長得像一個怪物,我會在 麻煩。想象3年或更長時間後。索引也會很大。

  2. 有一個觸發器,cron作業,或插件(如果存在的話),這將繞過桌子 和移動過期的項目到新表Post_Archive。 這樣,我保持我的主表,這意味着 目前唯一的職位,3年以上如果需要歸檔在連續的基礎上的數據(我不會像選擇1

回答

1

壞你的#2)而不是一個好的選擇是MaatKit。

http://www.maatkit.org/

它可以「蠶食」掉在大塊數據,而不是運行的佔用大量資源的質量查詢(和避免污染的關鍵緩存)。

所以是的,你會從cron運行一個Maatkit作業。與此同時,如果你想同時做#1,你可以實現一個視圖,方便地包裝「WHERE expiry_dat> NOW」條件,所以你不必將它全部包含在你的代碼中。

+1

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

0

一個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;