Лучший способ хранения пользовательских уведомлений? - PullRequest
6 голосов
/ 22 сентября 2011

Скажем, на сайте обмена ссылками люди могут делиться ссылками и оставлять комментарии. Пользователи, переходящие по ссылке, должны быть уведомлены о размещении там комментариев. Пользователи, следующие за категорией, должны быть уведомлены, когда ссылки делятся в этой категории. Как лучше всего хранить эти уведомления?

Я мог бы хранить их по отдельности, в этом случае их выбор был бы простым, но каждый раз, когда публикуется ссылка, мне приходилось добавлять уведомление для каждого, скажем, 10 000 человек, следующих за этой категорией.

Я также мог бы просто рассчитывать уведомления каждый раз, и в этом случае я бы подсчитывал количество новых комментариев с момента последнего входа пользователя в систему и отображал их. Однако тогда я не смогу сохранить старые уведомления.

Какие у меня варианты?


Хорошо, вот моя схема базы данных:

comments
 - id
 - user
 - link
 - content

links
 - id
 - user
 - content

subscriptions
 - id
 - user
 - link

Каждый раз, когда по ссылке делается новый комментарий, все пользователи, подписанные на эту ссылку, должны иметь «уведомление», которое они получат при следующем входе в систему.

Ответы [ 2 ]

4 голосов
/ 22 сентября 2011

Уведомления обычно являются объектом с высоким уровнем чтения, поэтому вы хотите иметь возможность очень быстро получить список непрочитанных уведомлений, а не пытаться вычислять на лету. Кроме того, попытка сравнить время входа в систему не дает хорошего опыта пользователя. Если пользователь не замечает их изначально, либо обновляет страницу, либо нажимает на нее, чтобы просмотреть подробности, все уведомления исчезают.

Имея это в виду, я хотел бы предложить иметь таблицу user_notification с читаемым / непрочитанным столбцом в ней. Хотя хорошо знать, где в вашей программе может возникнуть проблема с масштабируемостью, этого не произойдет, пока вы не продвинетесь (миллионы записей). Вы можете индексировать пользовательский столбец для увеличения скорости, а если вам когда-нибудь понадобится, вы можете разделить его по пользователям, чтобы помочь масштабировать диски / серверы.

Вам решать, хотите ли вы, чтобы уведомления были в отдельной таблице или просто частью таблицы users_notifications, и это было бы еще одной областью для оптимизации вокруг.

1 голос
/ 22 сентября 2011

Просто отслеживайте последний раз, когда они просматривали уведомления.Затем любые сообщения, на которые они подписаны и которые были созданы после этого времени, будут в уведомлениях для следующего просмотра уведомлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...