我正在使用PHP和MySQL来处理我的多人iOS游戏(为Android构建)的数据,游戏正在取得成功。我在高流量时间有大约3个电话pr。第二个到我的“move.php”页面。它需要玩家移动并将数据保存在我的数据库中,之后返回“已完成”。我需要这个以确保没有出错。当有高压时,我需要大约3-5秒才能完成“完成”并且需要更多时间。我希望得到的用户数量是现在的10倍,并且担心这会导致响应时间很长或者开始失败......在我的move.php页面中,我有大约5种不同的选择查询,4更新查询和2个插入查询。这部分是优化的,但我使用常规的mysql和php。
我正在徘徊什么是这方面的好习惯,如何让这个更快,特别是为了“完成”被送回。只要用户没有经历过这种情况,我不介意之后的长时间执行时间。 mysqli,pro,存储过程等是否为我做了什么?
希望得到答案并提前感谢...
答案 0 :(得分:4)
当您处理流量时,只有一件事有效Caching, caching and more caching...
你需要基本上想到一个具有用户 - 机器的一端的虚构尺度,而另一方面,你需要服务器 - 硬盘。因此,找出能够尽可能靠近用户端移动数据的技术。您点击服务器磁盘的次数越少,您网站的响应速度就越快。这包括像 -
这样的技术我可以提供更具体的工具等,但你可以在线轻松找到这些工具(阅读memcached
等),我强调了一般的想法...
答案 1 :(得分:3)
一般来说,提高应用程序的速度就是找到瓶颈 - 尝试分析脚本以查看哪些部分运行缓慢,然后优化它们。在不同点测量 - 数据库查询,程序模块,Web服务器请求。不要忘记使用不同的负载配置文件(并发请求数/秒,用户总数等)来分析您的应用程序。
典型的优化是:
EXPLAIN
进行SQL查询,以查看索引是否正确使用。无论性能问题如何,使用PDO或mysqli代替弃用的mysql模块都是一个好主意。
如果你真的希望立即获得“完整”回复,你可以查看Gearman - 它将允许你在后台处理SQL。但是,您需要监视工作负载 - 如果查询排队太多,则SELECT结果将不再反映当前的游戏状态。
答案 2 :(得分:3)
鉴于MySQL查询的数量,我会考虑将它们组合起来。例如,对于多个INSERT
,可以在同一个连接中运行,或者为每个连接发出不同的语句(锁定和解锁数据库)?
此外,查询对时间敏感吗?或者可以将结果发送到客户端,然后将查询放入作业队列中以便稍后处理?
除此之外,我只能建议已经建议的内容:分析你的代码,缓存你可以等等。
答案 3 :(得分:1)
除了您迄今为止提出的出色建议外,请不要忘记PHP Accelerators。它们确实可以加快执行时间。
此外,11个查询不是很多,但如果MySQL在每个查询执行计划中花费时间,那么它可以真正加起来。因此,如果准备好的陈述是可能的,那么值得考虑。