Переместить просроченные предметы?

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

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

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

2 ответа

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

http://www.maatkit.org/

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

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

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

Работа 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;
Другие вопросы по тегам