我正在使用PHP和MySQL来处理我的多人iOS游戏(为Android to构建)的数据,这个游戏正在走向成功。我在高流量的时候有大约3个公关电话。仅次于我的"move.php“页面。它让玩家移动并将数据保存在我的数据库中,然后返回一个“已完成”。我需要这个来确保一切顺利。当压力很高时,我需要大约3-5秒才能“完成”,有时甚至更长。我希望得到的用户是现在的10倍,我担心这会使响应时间变得非常长,否则就会开始失败……在我的move.php页面中,大约有5个不同的select查询、4个update查询和2个insert查询。这部分是经过优化的,但我使用的是常规的mysql和php。
在这一点上,我想知道什么是好的实践,以及如何使其更快,特别是对于要发送的“已完成”。我不介意过长的执行时间,只要用户没有经历过这一点。mysqli、pro、存储过程等对我有帮助吗?
希望能提前得到答案和感谢...
发布于 2013-01-11 17:39:53
在处理流量时,只有一件事可以使用Caching, caching and more caching...
你需要从本质上考虑一个虚构的规模,在一端你有用户-机器,在另一个极端你有你的服务器-硬盘。因此,找出能让你的数据尽可能靠近用户端的技术。你对服务器磁盘的访问越少,你的网站就会变得越快,响应越快。这包括像这样的技术-
我可以给出更具体的工具等,但你可以很容易地在网上找到这些(阅读memcached等),我已经强调了一般的想法……
发布于 2013-01-11 17:37:24
一般来说,让应用程序更快就是为了找到瓶颈--试着分析你的脚本,看看哪些部分运行缓慢,然后对它们进行优化。在不同的点进行测量-数据库查询、程序模块、web服务器请求。不要忘记使用不同的负载配置文件(并发请求数/秒、总用户数等)来分析您的应用程序
典型的优化包括:
Mysql
EXPLAIN查看从数据库返回的结果是否使用了索引(使用更多WHERE条件或LIMIT语句)如果可能,则缓存一些结果if out:使用多个服务器和负载均衡器,使用复制的不管性能问题如何,使用PDO或mysqli代替废弃的mysql模块都是一个好主意。
如果你真的想立即得到“完整”的返回值,你可以研究一下Gearman --它允许你在后台处理SQL。但是,您需要监控工作负载-如果查询排队太多,那么SELECT结果将不再反映当前的游戏状态。
发布于 2013-01-11 17:59:27
考虑到MySQL查询的数量,我会考虑将它们组合起来。例如,对于多个INSERT,可以在相同的连接中运行,或者您是否为它们中的每一个发出不同的语句(锁定和解锁数据库)?
另外,查询是时间敏感的吗?或者,是否可以将结果发送到客户端,然后将查询放入作业队列中,以便稍后处理?
除此之外,我只能建议已经提出的建议:分析你的代码,在你能缓存的地方缓存等等。
https://stackoverflow.com/questions/14275013
复制相似问题