【问题标题】:How to store a PHP variable that hundreds of users can access every second?如何存储每秒数百用户可以访问的 PHP 变量?
【发布时间】:2011-06-08 17:22:26
【问题描述】:

目前,我有一个网站,人们可以在某支球队的曲棍球比赛期间打开该网站。当曲棍球队得分时,指定人员点击安全位置的按钮。这将使用当前时间戳更新 MySQL 数据库中的单个条目。

在网站的前端,每 15 秒对 PHP 脚本进行一次异步调用,以查询数据库中的时间戳。然后脚本将当前时间与拉取的时间戳进行比较,如果它在当前时间戳的 15 秒内,它会在网页上触发一个事件,包括播放气喇叭的声音和播放球队目标歌曲的短片。

在球队比赛期间,我通常会获得大量的视线,但是很多人抱怨在进球后(最多)延迟 15 秒才能触发声音。我想找到一种方法来解决这个问题。

显然,我不认为为页面上的每个用户(想想 100 多个)每秒查询数据库会起作用;我可能会杀死我的数据库。那么,有没有其他方法可以实现我的结果?是否可以将 PHP 变量放入服务器的内存中,每个会话都可以提取该变量而不会产生使用数据库或文件系统读取的负面后果?

编辑:我的主机没有memcached 可供我使用,我无法安装它。这令人失望,因为这听起来像是最佳解决方案。有没有人可以考虑不使用memcached的替代想法?

【问题讨论】:

    标签: php memory variables


    【解决方案1】:

    在这种情况下,memcached 之类的东西(也可以作为memcache 的客观形式提供)很可能是完美的解决方案,其设计目标之一是“减少动态 Web 应用程序中的数据库负载”。

    您可以在main web site 上阅读有关 memcached 的更多信息,或者直接使用上面的链接来研究 PHP 的模块。

    【讨论】:

    • @mririgo 恐怕不是——在这种情况下,这通常是第一个停靠港。尝试哄骗您的托管服务提供商将其添加为选项可能是一个想法。
    • @mririgo 查看 APC(替代 PHP 缓存)是否可用。
    • @lonesomeday 好电话 - 如果他们没有 memcached,那不太可能,但你永远不知道。 :-)
    • @mririgo 可能是时候看看托管方面的其他地方了。 :-)
    • @mririgo - 别担心。由于您的托管服务提供商,在这种情况下,最合适的解决方案是 Comet 解决方案。 :-)
    【解决方案2】:

    对于这样的事情,您想使用一种称为 Comet 的技术。它不是特别困难,但需要一些努力。

    基本上,您将保持对每个浏览器的实时连接打开,而不是让它们每 15 秒重新打开一次连接。这允许您立即写入连接。

    Google 搜索“Comet”和“PHP”,您应该会找到一些不错的资源。 http://www.zeitoun.net/articles/comet_and_php/start 看起来很彻底。

    【讨论】:

    • +1。比其他答案要好得多,据我所知,这仍然需要反复重新连接。啊!
    • @Tomalak Geret'kal 这不是取决于他的服务器是否可以处理那么多并发实时连接吗?
    • @Tomalak Geret'kal 是的,但简单的事实是,每个并发实时连接都会为 httpd/php 占用“x”MB 内存,因此可能无法在低端服务包。 (也就是说,Comet 仍然是一个好主意 - 我只是指出在这种情况下它可能是不可能的。)
    • 作为前 Dreamhost 客户,我可以确认 Comet 技术可以在他们的服务器上运行。
    • @middaparka:是的,没错,这也是一个考虑因素。
    【解决方案3】:

    http://memcached.org/ 是您要找的。这直接用于对系统中的对象、数组和变量进行基于 ram 的快速数据访问。只要您进行并发更新,就可以减少 MySQL 的负载。

    【讨论】:

      【解决方案4】:

      如果您没有锁定,只是阅读,“100+”个请求甚至没有那么重。您是否考虑过只做压力测试?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-06
        • 2017-01-14
        • 2013-05-24
        • 2022-08-14
        • 2017-02-05
        • 1970-01-01
        • 2015-07-26
        • 2021-05-10
        相关资源
        最近更新 更多