slamer3000
Новичок
Удаление старых (устаревших) данных из таблиц для уменьшения размера базы
Такой пример, с которым недавно столкнулся:
Есть таблица статистики. В неё постоянно добавляются записи.
Черз 2-3 года она скорее всего вырастет в 300 гигабайт.
Есть угроза того, что тупо закончится винчестер. Не говоря уже о том, что добавление работает всё медленнее и медленнее.
Начальник поставил задачу разработать алгоритм "удаления" устаревших данных. Например, каких-то записей, которые уже реально не нужны (по крону).
У меня есть пару задумок по этому поводу:
1) Для таблиц, где цифровые статистические данные (например, количество кликов или платежей. Один клик - одна запись, один платёж с опр. суммой - одна запись)
считать количество или сумму для всех записей, дата которых меньше заданной (time < now() - 2 года) и записывать её в поле с датой = now() - 2 года. И удалять эти записи.
2) Для таблиц, где надо удалять записи (например, старые, неактивные регистрации юзеров) - удалять все с датой меньше заданной.
3) Для таблиц, для которых важно, чтобы данные сохранялись (например, файлы, которые давно уже никто не качает, как на iFolder'е), перемещать их в отдельную
базу на отдельный сервер с кучей винтов и удалять эти записи из главной базы. Такие записи не будут участвовать в поиске, в статистике, но при необходимости к ним можно будет обратиться по id в другую базу (в отдельной таблице хранить id перемещённых файлов) и вернуть запись назад в основную базу.
У кого ещё есть идеи? Кто сталкивался с такой проблемой и как лучше всего это спланировать (избавление от ненужных записей)?
Важен сам подход. Рад буду услышать мнения экспертов.
Такой пример, с которым недавно столкнулся:
Есть таблица статистики. В неё постоянно добавляются записи.
Черз 2-3 года она скорее всего вырастет в 300 гигабайт.
Есть угроза того, что тупо закончится винчестер. Не говоря уже о том, что добавление работает всё медленнее и медленнее.
Начальник поставил задачу разработать алгоритм "удаления" устаревших данных. Например, каких-то записей, которые уже реально не нужны (по крону).
У меня есть пару задумок по этому поводу:
1) Для таблиц, где цифровые статистические данные (например, количество кликов или платежей. Один клик - одна запись, один платёж с опр. суммой - одна запись)
считать количество или сумму для всех записей, дата которых меньше заданной (time < now() - 2 года) и записывать её в поле с датой = now() - 2 года. И удалять эти записи.
2) Для таблиц, где надо удалять записи (например, старые, неактивные регистрации юзеров) - удалять все с датой меньше заданной.
3) Для таблиц, для которых важно, чтобы данные сохранялись (например, файлы, которые давно уже никто не качает, как на iFolder'е), перемещать их в отдельную
базу на отдельный сервер с кучей винтов и удалять эти записи из главной базы. Такие записи не будут участвовать в поиске, в статистике, но при необходимости к ним можно будет обратиться по id в другую базу (в отдельной таблице хранить id перемещённых файлов) и вернуть запись назад в основную базу.
У кого ещё есть идеи? Кто сталкивался с такой проблемой и как лучше всего это спланировать (избавление от ненужных записей)?
Важен сам подход. Рад буду услышать мнения экспертов.