【问题标题】:What to avoid in php/mysql/ajax when relying on heavy reads/writes依赖大量读取/写入时,在 php/mysql/ajax 中应避免什么
【发布时间】:2009-11-27 17:44:19
【问题描述】:

我想知道在创建依赖于每秒大量读取和写入的 Web 应用程序时要避免的主要事情是什么。

想想涉及金钱的在线游戏。

例如,您有一个不断更新浏览器的 javascript(1),有一个正在运行的 cronjob 更新 db(2),有通过 ajax 或 POST(3) 提交的用户输入,并且您有多个用户执行每秒所有这些动作(4)。

还涉及金钱,因此必须以正确的方式读取和写入所有数据(5)。在发生崩溃的情况下,必须以正确的方式恢复数据,因此备份 (6) 很重要。

在创建如此复杂的应用程序时要记住很多事情,您绝对应该记住哪些事情。

我想知道您对此有何看法,谢谢!

【问题讨论】:

    标签: php mysql ajax


    【解决方案1】:

    缓存:使用 Memcached 并尝试尽可能少地访问数据库。

    使用快速的网络服务器或网络服务、不同的服务器或运行在不同端口上的脚本来执行不同的任务,而不会产生太多的臃肿。

    【讨论】:

      【解决方案2】:

      如果带宽是一个问题,请考虑将您的输出压缩到浏览器。或者,如果 CPU 功率存在问题并且启用了 gzip,请将其禁用,但可能会增加带宽使用率。

      将您的静态文件(如 css 和图像以及 javascript 等)设置为缓存在浏览器上,并设置为在很长一段时间后过期。这意味着重复用户不会用尽您的带宽等来请求他们已经拥有的相同版本的文件。

      对您使用的查询运行基准测试。尽可能优化。也许将长查询分成更小的查询可能会提高性能。使用像 xdebug 这样的分析器来找出你的瓶颈。

      使用持久的 sql 连接在每次加载时节省新连接上的资源。

      创建一个镜像数据库,当您插入主数据库时,将相同的数据插入第二个数据库。不要从第二个数据库中读取,因为它用作备份。如果可以,请尝试将第二个数据库放在不同的服务器上。如果第二个数据库不可行,您提到的 cron 作业备份应该可以正常工作。

      接下来……你的应用程序中真的需要 ajax 吗?没有它会工作吗?不要使用 ajax 中的额外请求向您的网站添加不必要的膨胀。

      我不能写更多,因为我不知道你的网站/应用程序的细节。

      【讨论】:

        【解决方案3】:

        我不确定我是否在回答“要避免什么”这个问题,而是“要考虑什么”......

        • 查看缓存 - 用于 php 页面的操作码缓存和用于参考数据和其他“静态”(或接近静态数据)的内存缓存(APC、memcache)。
        • 查看并发问题 - 确保您已了解两个人“同时”更新的情况以及如何撤消一个人。
        • 查看mysql replication
        • 尽量避免过多的ajax。有时我们会对屏幕上更新的数据量感到厌烦,因为 ajax 是如此简单。即,有时您可以稍微更改业务逻辑/需求(如果可能的话),以使技术方面更加简单。
        • 在此类复杂系统中拥有良好的用例并经常进行测试。

        【讨论】:

        • APC 是一场轻松的胜利,非常值得花 60 秒的时间来获得它!
        【解决方案4】:

        不过,这些都是非常小的读写操作。您(希望)只加入两个或三个表。

        此外,您可以在内存中为游戏本身做所有事情,只需将所有内容存储到用户会话或全局缓存中。然后,您希望在每次更改时将财务详细信息写入数据库,但更新单个玩家的资金应该是一到两个表连接,顶部。您可能还需要一个日志/交易表,以查看在什么时间有多少资金转入某人的帐户。

        无论如何,我不会非常担心短查询的性能;数据库在这方面出奇地好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-18
          • 2018-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多