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