Как лучше организовать систему уведомлений?

Есть проект, подобие социальной сети, в нем есть: подписки, комментарии и лайки к постам.
Встал вопрос о добавлении уведомлений, первое в голову пришло это хранить уведомления в таблицах, вот пример:
5f3a8e5980af1593594649.jpeg
Но я наткнулся на следующий подход:
В таблицах posts/posts_likes/users_subs/users_followers добавлять колонку status=new|read и по этой колонки определять сколько уведомлений не было прочитано и их собственно отдавать пользователю.
Очевидно что второй вариант - более выгоден с точки зрения памяти в БД, да и таблицы новые не нужно создавать. Есть ли более лучшие варианты для организации системы уведомлений?
  • Вопрос задан
  • 717 просмотров
Пригласить эксперта
Ответы на вопрос 3
inoise
@inoise
Solution Architect, AWS Certified, Serverless
А что будет с несколькими разнотипными устройствами?)

Вообще - отправителя выкинуть, в основную таблицу добавить тип уведомления, данные хранить сериализированном виде или вообще взять нереляционную базу данных. А вообще это должно на очередях работать. Или вам где-то отдельно очень надо выводить список последних уведомлений? (что сомнительно)
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Уведомление - присылает не юзер, а система. Поэтому поле senderUserId - лишнее, как и receiverUserId.

Полей должно быть всего 5:
id:uint,
type:uint,
userId:uuid,
isRead:bool,
created:timestamp

А кто именно прислал и какое именно уведомление, находим через таблицу типов уведомлений notification_type.
А там: id и notifycation_table (у Вас их 4. те, что слева).
Используя id(уведомления), notifycation_table и userId (для кого уведомление), мы находим сразу все подробности нужного уведомления.

Т.е, поиск ведём от общей таблицы уведомлений в 3 итерации: "погружение" выборки (запрос будет один, разумеется, но выполнится он гораздо быстрее), а не наоборот (как сейчас сделано у Вас).
Ответ написан
alekseyHunter
@alekseyHunter
Android developer
Я юзаю Firebase и запросы к нему с сервера. Это если уведомления - PUSH.
Если уведомления внутри приложения, тут лучше web-socket.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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