Для моего университетского проекта я разрабатываю веб-сайт динамического чата с комнатами, регистрацией пользователей и т. Д. Я спланировал всю систему без одного аспекта.Комнаты.Я запутался в том, как спроектировать базу данных для комнат.
Чтобы представить ее в перспективе, комната создается пользователем, который затем является оператором этой комнаты.Пользователи могут присоединиться к комнате и общаться в ней.Система должна быть масштабируемой, составляя сотни тысяч, если не миллионов сообщений, отправляемых в день.
Первоначально я собирался создать таблицу в своей базе данных с именем messages
и иметь такие поля, как это:
| r_id | u_id | message | timestamp |
r_id
и u_id
будут внешними ключами для идентификатора комнаты и идентификатора пользователя соответственно.Выполнение этого означает, что мне нужно будет вставлять новую запись всякий раз, когда пользователь отправляет сообщение, и периодически запускать оператор SELECT для каждого клиента (скажем, каждые 3 секунды или около того), чтобы получать последние сообщения.Я беспокоюсь об этом из-за того, что таблица будет огромной, выполнение этих операторов может привести к большим накладным расходам и занять много времени.
Другой способ, которым я думал о реализации этого, - создать новую таблицу базы данных длякаждая комнатаСкажем, пользователь создает 3 комнаты с именами General
, Programming
и Gaming
, таблицы базы данных будут выглядеть так: room_general
, room_programming
, room_gaming
, каждая с полями, такими как:
| u_id | message | timestamp |
Это резко сократит количество запросов для каждой таблицы, но может привести к проблемам, когда я приду к программированию.
Итак, я застрял на том, что лучшесделать этоЕсли что-то изменится, то я буду использовать технологию MySQL с PHP и целую лототу AJAX.
Спасибо за любую помощь!