Вопрос много раз изжеванный, но время вносит свои коррективы. По новому законодательству, если на ресурсе используется user-generated-content, владелец обязан хранить его полгода. Это данность и она не обсуждается.
Сервачок так себе, слабенький. Некоммерческий проект, понтоваться из своего кармана дорого.
Движок на PHP+MySQL (в реальной жизни классика всегда выигрывает).
Главная InnoDB таблица чата содержит все строки в куче:
id // primary
id_channel // приватные или групповые каналы
id_from
id_to // если канал приватный
text
timestamp
Доступ к нужным строкам — where "id_from | id_to", они оба в индексах.
Таблица заполняется в реалтайме аяксом, тут же обновляется текст чата на клиенте.
Юзеров — 10 000. Сколько текста они нагенерят за полгода — одному аллаху известно.
Нагрузочного тестирования пока не было — чат только-только прикручивается. Но что-то мне подсказывает, что тысячу одновременных хитов эта конструкция не выдержит, а их может быть и больше...
Что делать, бразы?
Делить таблицу на приватные/групповые?
Время от времени скидывать таблицу в архив?
...а эту тем временем держать в MEMORY?
Создавать таблицу-прокладку для скорейшего доступа?
Еще что-то упустил?