【问题标题】:PHP/MYSQL help for giving notifications to all users(followers) even millions of themPHP/MYSQL 帮助向所有用户(关注者)甚至数百万用户提供通知
【发布时间】:2011-08-30 08:01:20
【问题描述】:

我想在 PHP/MYSQL 中创建一个系统,通过该系统,网站的用户可以关注/取消关注同一网站的其他用户,并且当用户进行某些活动时,该用户的所有关注者都应该收到通知。

我知道我可以创建一个名为notifications 的单独数据库表,并为每个需要像 Facebook 那样单独通知的用户在其中插入行,但我不会限制用户(即在 Facebook 上你不能拥有更多5000 位朋友),在我的网站上,用户可以关注任意数量的用户,如果某个用户有 100 万关注者,那么在我的服务器上,他的每一个活动都会让我的服务器宕机。

那么如何完成这项任务,我的 Mysql 数据库需要使用什么样的设计,我需要以什么方式调用这些行,以便我可以向用户和服务器的所有关注者发送通知永不言败。

【问题讨论】:

  • 您目前有拥有 100 万粉丝的用户吗?你有100万用户吗?如果您还没有到这些数字,现在考虑这些数字可能还为时过早。
  • 是的,它可能发生,请帮助我。
  • 即使是拥有 10,000 个关注者的用户也会导致我的服务器出现问题。我只是不想让网站失望,我做了很多搜索,想了很多,但我仍然没有任何关系。
  • 我同意 Pekka,担心这对 2 个用户也有效。一百万追随者将是一个很好的问题:)
  • 即使是最熟练的开发人员也能单独管理 100 万用户。如果你达到了这个规模,你肯定会有资源来聘请帮助和解决这个问题。

标签: php mysql phpmyadmin mysqli


【解决方案1】:

关注者从他关注的用户那里拉取通知。这样,通知就是表中的一行。合理的是,虽然我可能有数百万的追随者,但我关注的人数却很少(可能不到 1000 人)。

另外:考虑一下缓存策略。

【讨论】:

  • 嗨 oswald,你的回答似乎很有趣,但是关注其他用户的用户可能关注了 10K+ 其他用户,在这种情况下该怎么办?
  • 我的回答的假设是,事实并非如此。我只是没有精神能力来跟上那么多通知。另外,我同意 Pekka 和 Ryan 在对您的问题的评论中提出的建议:牢记优化,但在问题迫在眉睫时进行。
【解决方案2】:

结合使用您的建议以及 Oswald 的答案和 cmets。

作者创建一个更新,然后将记录添加到通知表中。如果作者有 10,000 个关注者,则有 10,000 个条目。这将变得相当大,并且需要使用优化、缓存等。

然后,关注者会每隔一段时间连接(通过类似于 Facebook 网络的客户端或手持设备)并拉取他们的通知。在这种情况下,我会收到上次访问或所有作者的通知。同样,正如您所指出的,这可能是 10,000 行,但使用更好的键,检索会很快,因为您只会收到关注者(他们的 ID)的通知。收到后,删除待处理的通知。

第二种选择是将通知修改为仅包含作者条目、帖子和日期。追随者连接,查询自上次搜索以来的新帖子,然后按作者过滤它们。尝试在第一个查询中删除尽可能多的记录,然后尝试将过滤器作为第二个查询或缓存的参考搜索。不要尝试链接这两个查询,因为您将杀死数据库服务器。使用键/索引首先获得最小的集合。

如果关注者有几个作者,请先查询作者更新,然后再查询日期。否则,在日期之后按作者搜索。

【讨论】:

    猜你喜欢
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 2020-11-03
    • 2018-09-08
    • 2017-09-18
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多