2016-06-10 73 views
0

我正在制作一个有帖子和回复系统的网站。通知和PHP + MySQL设计

我想要做的是有人回复时,发送通知给那些曾回复(或涉及)该职位的人。

我的想法是创建一个名为Notification的表,其中包含messageseen(看过/未读)字段。一旦有人回复,INSERT记录到Notification表中。

这看起来很简单直观,但如果有很多人参与其中,例如第31位用户回复,那么30位曾回复过的人将收到通知。这将创建30行SQL记录。第32位用户将创建31条记录。那么总行数将变为30+31=61

我的问题是

  1. 那是一个很好的方式来处理通知系统?
  2. 如果是这样,如何处理重复通知(未见过但有新回复)
  3. 如上所述,这会造成巨大的服务器负载吗?

非常感谢。

回答

1

我正在创建类似的系统。这是我的经验:

  1. 我的通知表如下所示:id(int)| | user_id(int)| post_id(int)| last_visited(日期时间)。

  2. user_id + post_id是uniquecomposite index

  3. 所以当用户打开页面时,我正在查找数据库中的条目(user_id + post_id)。如果我找到它,那么我更新last_visited字段,如果我找不到,然后创建新的行。

  4. 当我需要通知列表消息时,我只是查询在last_visited时间之后创建的所有消息。

  5. 此外,我有cron sript清理通知关闭帖子或禁止用户。

至于你的问题:

1和2:你必须找到将存储的数据量和网站性能之间的平衡。如果你不需要存储所有这些数据,你可以按照我的方式。如果需要这些数据,你的方式会更好。

3:这取决于访问者数量和其他功能。但这里有一些建议。您必须使用MySql表的索引才能获得更好的性能。你也应该考虑一下删除无用通知的cron脚本。如果你有超过700k每天的游客数量巨大,你会想到MogoDb或其他高性能数据库noSql

+0

我用你的方式解决了我的问题。谢谢你的好主意。 :) – Benyi