Всем привет, хотел в свободное время написать чат на go. Как правильно использовать базу данных при написании чата? Будет только мобильное приложение, буду использовать tcp.
И подойдет ли для этого mongodb, если будут связи, а именно будут комнаты, которые связаны с геологацией, а комнаты связаны с юзерами?
А что касается сохрания в базу данных, как я понимаю после отправки сообщения пользователем, нужно будет сохранить сообщение в базу, и после сохранения, отправить пуш о том что сообщение сохранилось и передать его остальным юзерам, подключенным к комнате? И нужно ли дожидаться сохранения в базу ? К примеру сохранять ассинхронно, а сообщение которое пришло по tcp, передать остальным юзерам чата? А потом из базы лишь подгружать сообщения по мере того, как юзеры будут смотреть историю сообщений? Уточнить хочется именно сам процесс обмена сообщениями, так как не до конца понимаю как все это происходит. (сам ios разработчик и в свободное время, хочу попробовать научиться backend разработке.)
MongoDB документарная база. Заводить новый документ для каждого 'привета' и смайлика выглядит расточительством, поэтому голосую за Postgre.
Сейчас в чатостроении модно структурировать сообщения в комнате деревом топиков, а не выливать сплошным потоком.
В тренде архитектура "один источник истины, один способ изменения состояния" то есть все изменения немедленно писать в базу. Так считается консистентней. И хорошо в какой нибудь форме реализовать механизм pubsub, что бы на интересующие(комнаты/топики) изменения состояния можно было подписаться. При записи в базу подписчикам рассылается уведомление, что состояние изменилось и его нужно обновить запросом к базе. Впрочем можно время от времени обновлять без уведомлений без pubsub и без push.
Подписчик делает такой запрос, обновляет состояние целиком и уже задача стороны клиента сделать diff/patch что бы не перерисовывать view полностью, а только в необходимых местах.
Илья Шатохин: просто интересно было спросить. Вы ведь почему-то отстаиваете этот продукт, хоть и не очень явно, но всё таки. А проблема с отсутствием очистки диска от удалённых данных всё таки важный вопрос при выборе базы данных. Вот мне и стало интересно - поменялось ли что-нибудь в этом плане в MongoDB, если не поменялось - фейл, если вы и не слышали о проблеме - тоже фейл, но теперь уже информированности сообщества которое его так или иначе рекламирует.
А кэшить уже не модно?
При первом запросе можно закешить данные хотябы на час и "Дисковая БД" тут не причем.
Тарантул подайдет в том случае если это будет не чат, а например онлайн доска для рисования. Когда нескалько людей однавлеменно меняют состаяние произвольной точки на поли. В этом случае кеширование будет просто беспалезно.