Здравствуйте!
Условия задачи :
1. Высоконагруженный сервис (социальная сеть)
2. Пользователи могут обмениваться сообщениями
2.1. У каждого пользователя есть папка ВХОДЯЩИЕ
2.2. И папка ОТПРАВЛЕННЫЕ.
2.3. В списках 2.1. и 2.2. выделяются НЕПРОЧИТАННЫЕ сообщения.
3. Сообщение имеет формат -[quote автор] [Заголовок][Текст][Отправитель][Получатель][Дата][Прочтено\Нет] [/quote]
Вопрос: какая структура была бы оптимальна для хранения и работы с сообщениями?
Планируемые запросы:
1. Вывод списка ВХОДЯЩИХ сообщений (постранично)
2. Вывод списка ОТПРАВЛЕННЫХ сообщений (постранично)
3. ПОИСК сообщений среди ВХОДЯЩИХ и ОТПРАВЛЕННЫХ по ЗАГОЛОВКУ и ТЕКСТУ
4. Отметка выбранных как прочитанных и непрочитанных.
5. Удаление выбранных.
6. Отправка сообщения.
Первое, что приходит на ум:
1. Таблица сообщений - Message
[CSV]id, subject, body, senderid, receiverid, sendate, isread[/CSV]
2. Таблица почтового ящика - Mailbox
[CSV]id, messageid, userid[/CSV]
Соответственно при отправке сообщения мы создаем 2 записи: 1 в Message, другую в Mailbox на userid-владельца ящика.
При удалении сообщения мы удаляем сначала запись в Mailbox, затем, если у сообщения не лежит в ящике отправителя - удаляем его из Message.
При выводе списков делаем join - Mailbox->Message
Вопрос: можно ли это реализовать как-то более удачно, с наименьшей избыточностью и потерей производительности?
