Переместить просроченные предметы? - PullRequest
1 голос
/ 24 мая 2009

У меня есть модель Post, у которой есть expiry_date. Я хочу знать, что такое лучший способ управлять масштабируемостью в этом случае. 2 варианта:

  1. Всякий раз, когда я хочу выбрать из таблицы, мне нужно указать, где expiry_date> СЕЙЧАС. Если стол Пост растет как монстр, я буду в беда. Представь себе через 3 года или больше. Индексы тоже будут огромными.

  2. Иметь триггер, задание cron или плагин (если он существует), который бы работал вокруг таблицы и переместить просроченные элементы в новую таблицу Post_Archive. Таким образом, я поддерживаю только текущие сообщения в моей главной таблице, что подразумевает что через 3 года я не буду так плох, как вариант 1.

Ответы [ 2 ]

1 голос
/ 24 мая 2009

Если вам нужно архивировать данные на постоянной основе (ваш # 2), тогда хорошим выбором будет MaatKit.

http://www.maatkit.org/

Он может «кусать» данные в виде кусков, а не выполнять массовые запросы, которые потребляют много ресурсов (и избегая загрязнения вашего кэша ключей).

Так что да, вы запускаете задание Maatkit из cron.

В то же время, если вы хотите сделать # 1 одновременно, вы можете реализовать представление, которое удобно заключает в себе условие "WHERE expiry_dat> NOW", чтобы вам не приходилось включать все это в ваш код.

0 голосов
/ 24 мая 2009

Работа 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...