【问题标题】:Notification and PHP+MySQL design通知和 PHP+MySQL 设计
【发布时间】:2016-10-10 22:17:12
【问题描述】:

我正在制作一个有帖子和回复系统的网站。

我想做的是当有人回复时,向曾经回复(或参与)该帖子的人发送通知。

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

这看起来简单直观,但如果涉及的人很多,例如第 31 位用户回复,则有 30 位曾经回复过的人会收到通知。这将生成 30 行 SQL 记录。第 32 位用户将记录 31 条记录。那么总行数将变为30+31=61

我的问题是

  1. 这是处理通知系统的好方法吗?
  2. 如果是,如何处理重复通知(没看到但有新回复)
  3. 如上所述,这会导致服务器负载过大吗?

非常感谢。

【问题讨论】:

    标签: php mysql notifications


    【解决方案1】:

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

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

    2. user_id + post_id 是unique composite index

    3. 所以当用户打开页面时,我在数据库中寻找一个条目(user_id + post_id)。如果我找到它,然后我更新 last_visited 字段,如果我没有找到,然后创建新行。

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

    5. 此外,我还为已关闭的帖子或被禁止的用户提供了干净的通知。

    至于你的问题:

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

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

    【讨论】:

    • 我通过你的方式解决了我的问题。谢谢你的好主意。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 2011-03-10
    • 2015-01-10
    相关资源
    最近更新 更多