我有一个在线iphone转基础游戏,同时有很多游戏在运行。我正在优化代码,因为我和服务器今天都崩溃了。
这是设置:
现在我有一个表,“匹配”(每行70个数据字段。结构),跟踪所有活动的匹配。每隔7秒,iphone将连接,下载他/她活动的“匹配”表中的所有匹配项,并更新iphone中的UI。
直到大约1000人下载游戏并玩游戏之前,这种方法很有效。服务器崩溃了。
所以为了优化,我想我可以创建一个名为“matches_needs_update”的新表。这个表有2行;名称和ID。 “id”与“匹配”表中的匹配相同。更新匹配后,将其放入此表中。
现在,不是搜索整个“匹配”表,查询只是检查玩家是否有任何需要更新的匹配,然后从“匹配”表中获取这些匹配。
我的问题有两个:
如果一个玩家处于活动状态,例如10个匹配,是否有一个很好的方法可以同时从“匹配”表中获得这10个匹配,或者我需要一个for循环执行10个查询,一个每场比赛:
“SELECT * FROM匹配WHERE id =?”
提前致谢
答案 0 :(得分:7)
你需要离开数据库。查看memcache或redis。
答案 1 :(得分:6)
答案 2 :(得分:2)
您的数据库看起来很小。一个包含70行的表应该在几毫秒内返回,甚至每秒数百个查询应该没有任何问题。
一些传统指针
答案 3 :(得分:1)
是时候开始缓存内容了,例如memcache和apc。
至于循环比赛......这是错误的做法。
用户如何通过外部参照表连接到匹配项?或者匹配表是否有像player1,player2这样的东西。
循环虽然查询不是正确索引表并通过userId进行连接以拉出所有活动匹配的方法,但我会更有效率。给你可能想要的用户数量(如果你还没有)分配活动和非活动游戏。
如果有6000个活跃游戏和3,000,000个非活动游戏,则对这些表格进行分区非常有益。