【问题标题】:Move Expired Items?移动过期物品?
【发布时间】:2009-05-24 17:24:45
【问题描述】:

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

  1. 每当我想从表中选择时,我需要包括 where 到期日期 > 现在。如果表 Post 长得像个怪物,我会在 麻烦。想象一下 3 年或更长时间。索引也会很大。

  2. 有一个可以运行的触发器、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”条件的视图,这样你就不必将它全部包含在你的代码中。

    【讨论】:

    • Maatkit 是一个出色的指针,谢谢——mk-archiver 是一个相当复杂的实用程序,但是xaprb.com/blog/2006/05/02/… 的一篇配套文章以极具指导性的方式解释了“操作原理”及其背后的想法方式 - 再次感谢您引导我找到它!-)
    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多