1

我有一个具有到期日期的模型帖子。我想知道在这种情况下管理可伸缩性的最佳方法是什么。2个选项:

  1. 每当我想从表中选择时,我需要包括 where expiry_date > NOW。如果表 Post 长得像个怪物,那我就麻烦了。想象一下 3 年或更长时间。索引也将是巨大的。

  2. 有一个触发器、cron 作业或一个插件(如果存在)可以绕过表并将过期项目移动到新表 Post_Archive。这样,我在主表中只保留当前的帖子,这意味着在 3 年内我不会像选项 1 那样糟糕。

4

2 回答 2

1

如果您需要连续归档数据(您的 #2),那么 MaatKit 是一个不错的选择。

http://www.maatkit.org/

它可以“蚕食”成块的数据,而不是运行消耗大量资源的大量查询(并避免污染您的密钥缓存)。

所以是的,你会从 cron 运行 Maatkit 作业。

同时,如果你想同时做#1,你可以实现一个方便地包装“WHERE expiry_dat > NOW”条件的视图,这样你就不必将它全部包含在你的代码中。

于 2009-05-24T17:42:25.913 回答
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;
于 2009-05-24T17:45:40.040 回答