2

我正在使用 PHP 和 MySQL 来处理我的多人 iOS 游戏(为 Android 构建)的数据,并且该游戏正在取得成功。我在高流量时间有大约 3 个电话公关。第二到我的“move.php”页面。它需要玩家移动并将数据保存在我的数据库中,然后返回“完成”。我需要这个来确保没有出错。当有高压时,我需要大约 3-5 秒才能“完成”回来,甚至更多。我希望获得的用户数量是现在的 10 倍,并且担心这会导致响应时间过长或开始失败...在我的 move.php 页面中,我有大约 5 个不同的选择查询,4 个更新查询和 2 个插入查询。这部分是优化的,但是我用的是常规的mysql和php。

我正在徘徊在这一点上什么是好的做法,以及如何使这更快,特别是为了将“完成”送回。只要用户没有经历过这种情况,我不介意之后的长时间执行。mysqli、pro、存储过程等对我有什么帮助吗?

希望得到答案并提前感谢...

4

4 回答 4

4

当您处理流量时,只有一件事有效缓存,缓存和更多缓存......

您需要从本质上考虑一个假想的规模,一端是用户机器,另一端是服务器硬盘。因此,找出将您的数据移动到尽可能接近用户端的技术。您访问服务器磁盘的次数越少,您的网站就会越快、响应速度越快。这包括技术,如 -

  1. 客户端数据存储。
  2. 服务器端缓存
  3. 服务器端网络加速器
  4. 正确索引您的数据,以便快速检索数据。

我可以提供更具体的工具等,但您可以在网上轻松找到这些工具(阅读memcached等),我强调了总体思路......

于 2013-01-11T09:39:53.313 回答
3

一般来说,让应用程序更快就是找到瓶颈——尝试分析你的脚本以查看哪些部分运行缓慢,然后优化它们。在不同点进行测量 - 数据库查询、程序模块、Web 服务器请求。不要忘记使用不同的负载配置文件(并发请求数/秒,用户总数等)来分析您的应用程序

典型的优化是:

  • 用于EXPLAIN您的 SQL 查询以查看索引是否正确使用。
  • 尽可能限制从数据库返回的结果(使用更多 WHERE 条件或 LIMIT 语句)
  • 如果可能,缓存一些结果。
  • 横向扩展:使用多台服务器和一个负载均衡器,使用 Replicated Mysql 服务器。

无论性能问题如何,使用 PDO 或 mysqli 代替已弃用的 mysql 模块都是一个好主意。

如果您真的想立即“完成”返回,您可以查看Gearman - 它允许您在后台处理 SQL。但是,您需要监控工作负载 - 如果查询队列过多,则 SELECT 结果将不再反映当前游戏状态。

于 2013-01-11T09:37:24.397 回答
3

鉴于 MySQL 查询的数量,我会考虑将它们组合起来。例如,对于多个INSERTs,然后可以在同一个连接中运行,或者您是否为它们中的每一个发出不同的语句(锁定和解锁数据库)?

此外,查询是否对时间敏感?或者可以将结果发送到客户端,然后将查询放入作业队列以供稍后处理?

除此之外,我只能建议已经建议的内容:分析您的代码,缓存您可以的地方等。

于 2013-01-11T09:59:27.480 回答
1

除了到目前为止您获得的出色建议之外,不要忘记PHP 加速器。它们确实可以加快执行时间。

此外,11 个查询并不多,但如果 MySQL 为每个查询花时间在查询执行计划中,那么它真的可以加起来。因此,如果准备好的语句是可能的,那么值得考虑。

于 2013-01-11T09:44:35.543 回答