Задать вопрос
Twitt
@Twitt

Правильная структура бд для хранения сообщений, и где их лучше хранить?

Как лучше хранить пользовательские сообщения? Есть в голове пару форматов:
1 формат:
Таблица dialogs
id | from_user_id | to_user_id

Таблица messages
id | dialog_id | date

Таблица content_message:
id | message_id | message_content

Таблица attachment
id | message_id | path_to_file

Формат 2:
Таблица message:
id | from_user_id | to_user_id | date | message | attachment

Какой есть корректным? По итогу нужна сразу нормальная структура, чтобы когда проект рос, это не надо было переписывать в корректный формат.

Также вопрос, на каком моменте (сколько сообщений должно быть, нагрузка) чтобы думать о таких понятиях как шардинг? И всегда ли надо держать это в бд, может потом надо переносить на системы полнотекстового помска на подобии эластика, солра, сфинкса? Где держат ЛС крупные социальные сети типа фб, вк, ок?

Спасибо
  • Вопрос задан
  • 183 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
формат 2 подходит, сообщение это 1 сущность, не надо разбивать ее на подсущности, это ускорит работу с таблицей и немного упростит миграции и репликации. Возможно аттачмент стоит вынести в отдельную таблицу, так как не факт что завтра их не будет больше 1. Не хватает статуса прочтен и статуса удалено у какого-то пользователя.
По количеству - таблица считается большой от нескольких миллионов записей, скорость выборки зависит от кучи параметров, как железа так и структуры индексов/данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы