2009-05-24 126 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;