移动过期的物品?

发布于 2024-07-22 00:09:37 字数 329 浏览 7 评论 0原文

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

  1. 每当我想从表中进行 SELECT 时,我需要包括 where 到期日期> 现在。 如果桌子上的帖子像怪物一样增长,我就会加入 麻烦。 想象一下三年或更长时间后。 索引也会很大。

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

I have a model Post which has a expiry_date. I want to know what is the
best way to manage scalability in this case. 2 options:

  1. Whenever I want to SELECT from the table, I need to include where
    expiry_date > NOW. If the table Post grows like a monster, I will be in
    trouble. Imagine after 3 years or more. Indexes will be huge too.

  2. Have a trigger, cron job, or a plugin (if it exists) that would go
    around the table and move expired items to a new table Post_Archive.
    That way, I maintain only current Posts in my main table, which implies
    that over 3 years I won't be as bad as option 1.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别忘他 2024-07-29 00:09:37

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

http://www.maatkit.org/

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

所以是的,您可以从 cron 运行 Maatkit 作业。

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

If you need to archive data on a continuous basis (your #2) than a good option is MaatKit.

http://www.maatkit.org/

It can "nibble" away at data in chunks rather than running mass queries which consume lots of resources (and avoiding polluting your key cache).

So yes, you would run a Maatkit job from cron.

In the meantime, if you want to do #1 at the same time, you could maybe implement a view which conveniently wraps up the "WHERE expiry_dat > NOW" condition so you dont have to include it all on your code.

鲸落 2024-07-29 00:09:37

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;

A cron job sounds good to me, and it can be done by feeding a simple script directly to the mysql command, e.g., roughly:

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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文