Как правильно использовать базу данных для чата?

Всем привет, хотел в свободное время написать чат на go. Как правильно использовать базу данных при написании чата? Будет только мобильное приложение, буду использовать tcp.
И подойдет ли для этого mongodb, если будут связи, а именно будут комнаты, которые связаны с геологацией, а комнаты связаны с юзерами?
А что касается сохрания в базу данных, как я понимаю после отправки сообщения пользователем, нужно будет сохранить сообщение в базу, и после сохранения, отправить пуш о том что сообщение сохранилось и передать его остальным юзерам, подключенным к комнате? И нужно ли дожидаться сохранения в базу ? К примеру сохранять ассинхронно, а сообщение которое пришло по tcp, передать остальным юзерам чата? А потом из базы лишь подгружать сообщения по мере того, как юзеры будут смотреть историю сообщений? Уточнить хочется именно сам процесс обмена сообщениями, так как не до конца понимаю как все это происходит. (сам ios разработчик и в свободное время, хочу попробовать научиться backend разработке.)
  • Вопрос задан
  • 876 просмотров
Решения вопроса 1
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
MongoDB документарная база. Заводить новый документ для каждого 'привета' и смайлика выглядит расточительством, поэтому голосую за Postgre.
Сейчас в чатостроении модно структурировать сообщения в комнате деревом топиков, а не выливать сплошным потоком.
В тренде архитектура "один источник истины, один способ изменения состояния" то есть все изменения немедленно писать в базу. Так считается консистентней. И хорошо в какой нибудь форме реализовать механизм pubsub, что бы на интересующие(комнаты/топики) изменения состояния можно было подписаться. При записи в базу подписчикам рассылается уведомление, что состояние изменилось и его нужно обновить запросом к базе. Впрочем можно время от времени обновлять без уведомлений без pubsub и без push.
Подписчик делает такой запрос, обновляет состояние целиком и уже задача стороны клиента сделать diff/patch что бы не перерисовывать view полностью, а только в необходимых местах.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Если вам нужны связи, то лучше взять PostgreSQL, например, вместо Монги. Там есть и геолокационные фишки и даже с JSON можно нативно работать.
Ответ написан
@KkJ
Дисковая БД для чата? Вы серьезно?
БД в памяти - Tarantool.
Умеет сохранять свое состояние на диск.
Ответ написан
mukizu
@mukizu
Из баз данных еще на https://www.rethinkdb.com/ можно глянуть.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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