小编典典

PHP应用程序中的未读消息计数

sql

我目前正在开发一个简单的PHP应用程序,用户可以在其中相互发送消息。消息存储在SQL数据库中。我想在每个页面的菜单中放置一些未读邮件,以便用户可以快速查看他们是否有新邮件,而无需定期检查收件箱。

尽管这可能是一个容易解决的问题,但我不知道最佳的性能是什么:

  1. 是否在每个页面加载时执行未读消息的普通SQL COUNT() (立即通知更改,但可能严重影响性能?)
  2. 做同样的事情,但是将结果缓存X分钟 (我们创建了一个令人讨厌的延迟)
  3. 与2.相同,但 仅在我们阅读消息或消息发送给我们时更新 (由于我们为每个用户创建一个持久性条目/文件 ,我们 可能会占用大量RAM /对磁盘造成压力:我们无法存储它在$ _SESSION中,因为当另一个用户向我们发送消息时,我们需要对其进行更新)

我所有的解决方案都基于服务器,因为我对JS不太熟悉。但是,如果存在使用JavaScript的更好的解决方案,那就可以了。

谢谢您的帮助 !


阅读 190

收藏
2021-04-22

共1个答案

小编典典

我建议第四个:

将新消息发送给用户后,您将在中更新计数器memcache。您在客户端创建简单的ajax应用程序,每隔X秒发送一次请求。在服务器端,您只需检查是否存在未读消息。在页面刷新时,您不需要查询数据库,因为您可以memcache快速获得计数。

如果我在DB中遇到瓶颈,那就是我要做的事情(在90%的情况下,DB是任何数据库驱动的应用程序中最重要的部分)。

这就是我们通常在高负载的网站上所做的事情:我们试图避免任何COUNTER查询。如果没有,我们将数据库反规范化以将计数器存储在适当的表中作为另一列,例如,如果您不能使用memcache,则将未读消息计数器存储为Users表的列。

2021-04-22