我正在实施一个通知系统,看看这些建议是否有效,如果一个比另一个更好或者有更好的解决方案:
通知将添加到数据库中.访客/可识别用户登录或使用该站点.他们会收到他们以前从未见过的通知,可以选择关闭或稍后阅读.
通知表存储通知文本和Id.
选项1:警报表存储已阅读通知的所有用户
选项2:警报表存储未读取通知的所有用户
这些选项是不是很重要,最好是添加潜在的100,000多个警报,并且当这些用户丢弃或与通知交互时,它们的状态会被更改或警报被删除.这可能会变成一张非常大的桌子......
什么是基于用户活动的自定义通知的更具可扩展性的设置?
我不这样做.我会为每个(用户,通知)存储一条记录,并将每条记录标记为已读或未读.然后,您可以记录它们何时阅读,这可能很重要,具体取决于您的应用程序(例如,如果您需要某种审计跟踪).
100k记录不是很大.在获得至少1000万条记录之前,不要担心大小.如有必要,可以在某些时候归档.但是你应该对你产生1000万条记录的速度做一些估计.如果是3天,那么你有问题.如果它是3年,那么你没有.
当然,此选项在单独的表中包含通知文本.
当您为用户选择未读消息(索引)时,这也应该在更高数量的消息中非常好地扩展,并且可以加入以获取通知文本(如果您的表是数千万条记录大小)或选择它们然后分别选择消息.
对(用户,通知)表进行分区很简单:您可以根据用户范围进行分区.
当用户删除邮件时,通常您应该将其标记为已删除而不是实际删除邮件.大多数情况下,没有太多理由删除数据库中的任何内容.
我正在编写我的网站,并有同样的问题,但我这样解决了自己:
将所有记录存储在通知表中.
Read/Unread = true/false
CRON作业:如果用户有超过50个通知,则删除旧的10个通知.
我认为Facebook定期运行一个cron作业来删除我们在达到限制通知后无法看到的旧通知.