Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 每小时130万次查询。您将如何构造查询?_Php_Iphone_Mysql_Phpmyadmin - Fatal编程技术网

Php 每小时130万次查询。您将如何构造查询?

Php 每小时130万次查询。您将如何构造查询?,php,iphone,mysql,phpmyadmin,Php,Iphone,Mysql,Phpmyadmin,我有一个基于iphone的在线游戏,很多游戏同时运行。我正在优化代码,因为我和服务器今天都崩溃了 以下是设置: 现在我有一个表“matches”(每行70个数据字段,结构),它跟踪所有活动的匹配。每7秒,iphone就会连接,下载“matches”表中他/她活动的所有匹配项,并更新iphone中的UI 直到大约有1000人下载了游戏并开始玩,这一切都非常有效。服务器崩溃了 为了优化,我想我可以创建一个名为“matches\u needs\u update”的新表。此表有2行;名称和id。“id”

我有一个基于iphone的在线游戏,很多游戏同时运行。我正在优化代码,因为我和服务器今天都崩溃了

以下是设置:

现在我有一个表“matches”(每行70个数据字段,结构),它跟踪所有活动的匹配。每7秒,iphone就会连接,下载“matches”表中他/她活动的所有匹配项,并更新iphone中的UI

直到大约有1000人下载了游戏并开始玩,这一切都非常有效。服务器崩溃了

为了优化,我想我可以创建一个名为“matches\u needs\u update”的新表。此表有2行;名称和id。“id”与“matches”表中的匹配项相同。当一个匹配项被更新时,它被放入这个表中

现在,为了搜索整个“matches”表,查询只需检查玩家是否有需要更新的匹配项,然后从“matches”表中获取这些匹配项

我的问题有两个:

  • 这是最佳解决方案吗
  • 如果一个玩家在(比如)10场比赛中处于活动状态,是否有一种好方法可以同时从“matches”表中获取这10场比赛,或者我是否需要一个for循环来执行10个查询,每场比赛一个:

    “从id=?”的匹配项中选择*”


  • 提前感谢

    您需要离开数据库。看看memcache或redis。

    我建议…

    …当您使用PHP时,我假设您是从一个mysql数据库执行此操作的

    它很容易安装,从PHP6开始将是默认的


    将此1表保留在内存中,它将运行。

    您的数据库看起来非常小。一个包含70行的表应该在毫秒内返回,甚至每秒数百个查询都应该可以正常工作

    一些传统的指针

    • 请确保您共享您的连接。当客户需要数据时,您不必进行连接
    • 确保“用户在匹配中”上有索引,以便从索引中获取结果
    • 我确信您有足够的内存将整个结构保存在缓存中,并且对于这些小表,不需要额外的配置
    • 确保您的模式已规范化。每个用户一个表。每场比赛一个。一个匹配中的每个用户一个

    是时候开始缓存东西了,比如memcache和apc

    至于在比赛中循环。。。这是错误的做法

    用户如何通过外部参照选项卡连接到匹配项?或者比赛桌上有什么东西像player1,player2

    循环查询并不是正确索引表的方法,通过用户ID进行连接以提取所有活动匹配项会更有效。给出您可能还希望(如果您没有)将表拆分为活动和非活动游戏的用户数


    如果有6000个活动游戏和3000000个非活动游戏,那么对这些表进行分区是非常有益的。

    虽然问题很严重,但仔细想想,这是您可能遇到的最好的问题之一。来自太多实际用户的崩溃是最好的崩溃方式。使用推送通知的解决方案可能是解决性能问题的更好方法。这样你就不会有太多多余的回合检查。听起来好像一个人可以在多场比赛中活跃,而多个人可以在一场比赛中活跃?当然你必须有3个表?内存缓存是这里的解决方案。是的,每场比赛有2-6名玩家,每个玩家一次最多可以运行30个活动游戏。谢谢回复。我需要更新所有的php代码来处理它,还是只是为了安装?感谢SAPC是两件事。它是一个操作码缓存(缓存PHP代码以便更快地加载)和一个内存存储(即键值)。第一部分自动进行,并提高速度。但你对第二点感兴趣。因此,是的-您确实需要更新您的代码。阅读我链接的手册页面,从apc_商店开始了解这个想法。