Есть:
Есть таблица личных сообщений, кол-во записей приближается к 100М :( и скорость работы с этой таблицей все уменьшается и уменьшается. В таблицу часто пишут и часто читают.
Messages:
msg_id — auto_increment
from_id — ID пользователя отправителя
to_id — ID пользователя получателя
subj — тема
date — время создания
status — новое, прочитанное, отвеченное
Вопрос:
Каким(какими) образом можно разделить такую таблицу? Хотелось бы услышать разные мнения, по поводу самого разделения и как это все можно реализовать в коде.
Про партиции думали, отказались из-за того что восстановление из бекапа всей таблице занимает уйму времени. Да и создание партиций на такой таблице занимает кучу времени.
Спасибо за помощь. Отвечу на любые дополнительные вопросы :) Ну и напишу статью если будет интересно и актуально по такому вопросу.
UPDATE:
Всем спасибо. Пока больше всего нравятся следующие идеи.
- Сделать архивные таблицы и сделать оглавление к ним
- А так же разделить таблицу на несколько, оставив в основной только самые необходимые поля
У кого будут идеи как это можно улучшить или сделать совсем иначе?..
Думал в сторону шардинга, никак ума не приложу как это можно сделать с сообщениями. Когда один объект принадлежит больше чем одному пользователю :(
UPDATE2:
К первому update'у добавления
- Все это добро перенести на InnoDB
- Рассмотреть возможность перехода на uuid