当依赖于重读/写时,在php / mysql / ajax中要避免什么

时间:2009-11-27 17:44:19

标签: php mysql ajax

我想知道创建一个依赖于每秒重读和写的web应用程序时要避免的主要内容。

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

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

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

创建这样一个复杂的应用程序时要记住很多事情,你应该记住哪些事情。

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

4 个答案:

答案 0 :(得分:1)

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

使用快速的网络服务器或网络服务,在不同端口上运行的不同服务器或脚本来执行不同的任务,而不会有太多膨胀。

答案 1 :(得分:0)

我不确定我是否在回答“应该避免什么”的问题,而是“想要考虑什么”......

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

答案 2 :(得分:0)

如果带宽是个问题,请考虑将输出压缩到浏览器。或者,如果CPU电源出现问题并且启用了gzip,请禁用它,但可能会增加带宽使用的风险。

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

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

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

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

接下来的事情......在你的应用程序中,ajax真的很麻烦吗?没有它会有用吗?不要在ajax中添加额外请求,在你的网站上添加unessasary膨胀。

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

答案 3 :(得分:0)

但这些是非常小的读写。你(希望)只加入两三张桌子。

此外,您可以在内存中完成游戏本身的所有操作,只需将所有内容存储到用户会话或全局缓存中即可。然后,您需要在每次更改时将财务详细信息写入数据库,但更新单个玩家的资金应该是一个或两个表连接,tops。您可能还需要一个日志记录/交易表,以查看在何时将多少钱转移到某人的帐户。

无论如何,我不会非常担心短期查询的表现;数据库出奇的好。