对MySql和PHP中的用户通知系统的建议

时间:2009-07-25 08:08:03

标签: php mysql notifications

我正在实施一个通知系统,看看这些建议是否有效,如果一个比另一个更好或者有更好的解决方案可用:

通知将添加到数据库中。访客/可识别用户登录或使用该站点。他们会收到他们以前从未见过的通知,可以选择关闭或稍后阅读。

  • 通知表存储通知文本和ID。
  • 选项1:警报表存储已阅读通知的所有用户
  • 选项2:警报表存储所有未阅读通知的用户

这些选项是否非常重要,最好是添加可能超过100,000个警报,并且当这些用户丢弃或与通知进行交互时,会更改其状态或删除警报。这可能会变成一张非常大的桌子......

基于用户活动的自定义通知的可扩展设置是什么?

3 个答案:

答案 0 :(得分:13)

我不这样做。我会为每个(用户,通知)存储一条记录,并将每条记录标记为已读或未读。然后,您可以记录它们何时阅读,这可能很重要,具体取决于您的应用程序(例如,如果您需要某种审计跟踪)。

100k记录不是很大。在获得至少1000万条记录之前,不要担心大小。如有必要,可以在某些时候归档。但是你应该对你产生1000万条记录的速度做一些估计。如果是3天,那么你有问题。如果是3年,那么你就不会。

此选项当然会将通知文本放在单独的表格中。

当您为用户选择未读消息(已编制索引)时,这也应该在更高数量的消息中非常好地扩展,并且可以加入以获取通知文本(如果您的表的数量为数千万条)或选择它们,然后分别选择信息。

对(用户,通知)表进行分区很简单:基于用户范围。

当用户删除邮件时,通常只需将其标记为已删除而不是实际删除邮件。大多数情况下,没有太多理由删除数据库中的任何内容。

答案 1 :(得分:5)

我正在为我的网站编码并提出同样的问题,但我这样解决了自己:

  1. 将所有记录存储在通知表中。
  2. Read/Unread = true/false
  3. CRON作业:如果用户有超过50个通知,则删除旧的10个通知。
  4. 我认为Facebook定期运行一项cron作业来删除我们在达到限制通知后无法看到的旧通知。

答案 2 :(得分:1)

或者,您可以存储一组对每个用户配置文件尚未读取的注释的引用,然后在显示它们时将其删除(一般用例可能会立即读取所有注释) )。这样,当您拉动单个用户时,您只有一个小查询,而您的成本是全局消息的插入时间,而不是过滤大的未读消息表。