【问题标题】:Move Expired Items?移动过期物品?
【发布时间】:2009-05-24 17:24:45
【问题描述】:
我有一个具有到期日期的模型帖子。我想知道什么是
在这种情况下管理可伸缩性的最佳方法。 2个选项:
每当我想从表中选择时,我需要包括 where
到期日期 > 现在。如果表 Post 长得像个怪物,我会在
麻烦。想象一下 3 年或更长时间。索引也会很大。
有一个可以运行的触发器、cron 作业或插件(如果存在)
围绕表并将过期项目移动到新表 Post_Archive。
这样,我只在我的主表中维护当前的帖子,这意味着
3 年后我不会像选项 1 那样糟糕。
【问题讨论】:
标签:
mysql
ruby-on-rails
model
archiving
【解决方案1】:
如果您需要连续归档数据(您的 #2),那么 MaatKit 是一个不错的选择。
http://www.maatkit.org/
它可以“蚕食”成块的数据,而不是运行消耗大量资源的大量查询(并避免污染您的密钥缓存)。
所以是的,您可以从 cron 运行 Maatkit 作业。
同时,如果你想同时做#1,你可以实现一个方便地包装“WHERE expiry_dat > NOW”条件的视图,这样你就不必将它全部包含在你的代码中。
【解决方案2】:
一个 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;