IDONTSUDO
@IDONTSUDO
ЧСВ программистов идет в комплекте с первой IDE.

Как спроектировать Mongo или SQL базу под переписки?

есть пользователи, у этих пользователей есть переписки личные.
Таблица/Документ переписок выглядит примерно так.
Chanel:{
uuid:
name:
any:
users:
}

В этих таблицах есть сообщения
Таблица/Документ сообщения
Chanel:{
uuid:
chanel_id:
any:
user:
}

Проблемы начинаются на этапе, того что нужно как то отличать те сообщения которые пользователь прочитал и те что не прочитал. Допустим мы начинаем дублировать данные. По типу берем users и для каждого юзера генерирующим сообщение и тогда все просто и понятно в том плане что именно прочитано а что нет. Начинаются проблемы с редактированием/удалением сообщения. Тк как получается, допустим у нас чат на 100 человек. И если один из них редактирует сообщение нужно изменить/удалить все остальные сообщения.

Метод 2.
Добавляем в табличку канала, структуру.

usersRead:[{
user:uuid,
num:Number
}]


И вроде это решает проблему с тысячей документов. Но мы начинаем зависеть от фронта. Нам приходится контролировать socket соединение на двух уровнях.

1.Не просматривает ли пользователь эти сообщения прямо сейчас.
2.Находится ли пользователь в онлайне.
И у нас начинаются какие то бредни с вычислениями на бэке, тк как нам нужно постоянно перебирать какой то документ/таблицу./ Можно конечно все это сделать на уровне того что мы просто JOINим все эти таблички. И у нас нет вычислений но тогда нагрузка большая падает на базу данных.
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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