Переместить просроченные предметы?
У меня есть модельный пост, у которого есть expiry_date. Я хочу знать, как лучше всего управлять масштабируемостью в этом случае. 2 варианта:
Всякий раз, когда я хочу выбрать из таблицы, мне нужно указать где expiry_date > NOW. Если стол Пост растет как монстр, у меня будут проблемы. Представь себе через 3 года или больше. Индексы тоже будут огромными.
Иметь триггер, задание cron или плагин (если он существует), который обходит таблицу и перемещает просроченные элементы в новую таблицу Post_Archive. Таким образом, я сохраняю только текущие сообщения в своей основной таблице, что означает, что через 3 года я не буду так плох, как вариант 1.
2 ответа
Если вам нужно архивировать данные на постоянной основе (ваш #2), то хорошим выбором будет MaatKit.
Он может "кусать" данные в виде кусков, а не выполнять массовые запросы, которые потребляют много ресурсов (и избегая загрязнения вашего кэша ключей).
Так что да, вы запускаете задание 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;