我有一个有expiry_date的模型Post。我想知道是什么 在这种情况下管理可伸缩性的最佳方法。 2个选项:
每当我想从表中选择SELECT时,我需要包含where expiry_date>现在。如果表Post像怪物一样长大,我会进去 麻烦。想象一下3年或更长时间。索引也很大。
拥有触发器,cron作业或插件(如果存在) 围绕表并将过期的项目移动到新表Post_Archive。 这样,我在主表中只维护当前的帖子,这意味着 超过3年,我不会像选项1那样糟糕。
答案 0 :(得分:1)
如果你需要连续存档数据(你的#2)而不是一个好的选项是MaatKit。
它可以“蚕食”数据块中的数据,而不是运行消耗大量资源的大量查询(并避免污染密钥缓存)。
是的,你可以从cron运行一个Maatkit工作。
与此同时,如果你想同时做#1,你可以实现一个方便地包装“WHERE expiry_dat> NOW”条件的视图,这样你就不必将它全部包含在你的代码中。
答案 1 :(得分: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;