есть пользователи, у этих пользователей есть переписки личные.
Таблица/Документ переписок выглядит примерно так.
Chanel:{
uuid:
name:
any:
users:
}
В этих таблицах есть сообщения
Таблица/Документ сообщения
Chanel:{
uuid:
chanel_id:
any:
user:
}
Проблемы начинаются на этапе, того что нужно как то отличать те сообщения которые пользователь прочитал и те что не прочитал. Допустим мы начинаем дублировать данные. По типу берем users и для каждого юзера генерирующим сообщение и тогда все просто и понятно в том плане что именно прочитано а что нет. Начинаются проблемы с редактированием/удалением сообщения. Тк как получается, допустим у нас чат на 100 человек. И если один из них редактирует сообщение нужно изменить/удалить все остальные сообщения.
Метод 2.
Добавляем в табличку канала, структуру.
usersRead:[{
user:uuid,
num:Number
}]
И вроде это решает проблему с тысячей документов. Но мы начинаем зависеть от фронта. Нам приходится контролировать socket соединение на двух уровнях.
1.Не просматривает ли пользователь эти сообщения прямо сейчас.
2.Находится ли пользователь в онлайне.
И у нас начинаются какие то бредни с вычислениями на бэке, тк как нам нужно постоянно перебирать какой то документ/таблицу./ Можно конечно все это сделать на уровне того что мы просто JOINим все эти таблички. И у нас нет вычислений но тогда нагрузка большая падает на базу данных.