2012-01-23 53 views
5

服务器端缓存我的浏览器基于Flex的比赛(对Facebook平台),我使用PHP和MySQL服务器端编程和保存数据(使用AMFPHP)如何实现与PHP

由于我是对于游戏开发和PHP都很新颖,我想看看我的游戏在运行,我写了所有服务器端编码(amfPHP服务),其中包含非常丑陋和肮脏的代码,用于提取数据库,更新游戏状态(包括玩家统计和库存)。

肯定它效率不高,所以我已经开始寻找PHP中用于实现缓存的最佳方式。通过缓存,我的意思是我不想一直打数据库来保存玩家的最新游戏状态,但只是在会话结束时保存(当玩家离开应用程序时)。

通常情况下,我的游戏/应用流程是这样的

  • 球员从FB启动应用程序/游戏
  • 认证
  • 加载用户会话(以前保存的游戏状态)。这包括获取用户统计数据包括多少能量,金币,经验等等,他有,他的库存,当前活动的任务等,以及静态信息,如市场项目,优惠,滴等。
  • 更新游戏状态,当有变化时在游戏中,最常见的是当用户点击时在一些建筑物上收集,消耗能量,增加金币,给予经验或奖励等等。

现在,对于所有玩家来说,有一些常见数据是屈服的,比如“市场项目及其价格和图形资产等”,并且存在玩家特定数据。

我在脑海中有一些想法,我需要专家帮助,我在想什么好或坏,或者如果有更好的方法?

将静态(公共)数据永久保存在缓存中,并具有管理面板以清除/更新 认证后,检索数据并保存在缓存中(作为JSON对象)和所有读/写,直到会话结束在会话结束后将缓存数据保存到数据库中。

这里我想用APC。你认为这是可靠的吗?

我想,在最糟糕的情况下,当网络服务器崩溃时,所有的缓存数据将会丢失,所以我在考虑将它们保存在会话中,但我认为PHP将它们保存在文件中,这意味着会有很多我/ O这又是不推荐?或者这可以接受?

我也在想在串行化对象中保存游戏状态有多好?

回答

4

您是否对您的应用程序进行了描述并将数据库确定为瓶颈?看起来你似乎在试图优化那些最可能不是问题的事情。

从数据库中提取数据非常快。写入数据库可能会慢一些,特别是如果您使用事务。但数据库仍然可以轻松处理大量的每秒写入/更新调用。

看起来你正在做一些过早的优化,这会降低整个游戏的安全性和稳定性。除非你真的把DB写入性能瓶颈,否则这是不值得的。然后,你再也不想失去用户进度,因为你的会话被破坏了。最好再看看NoSQL

+0

我期待大约30-50K的并发用户在高峰期玩这个游戏。 DB还是可取的吗?感谢NoSQL,但我可能不会选择它,这对我来说可能是另一种学习。 – 2012-01-23 14:25:27

+0

并发用户数量不会那么重要。这取决于您将要获得的数据库事务的数量......并且在大多数情况下,DB系统也是可扩展的。因此,虽然您的代码可能比一个数据库更快,但它不会像数据库(您可以切换到数据库群集等)那样扩展。 – bummzack 2012-01-23 14:41:12

+0

@ dev2dev你可能会考虑PostgreSQL(免费),Oracle或MsSQL。关键性能补丁(例如查询优化器)目前仅在MySQL实验版本中;像一个体面的优化器和分区视图/表的东西,当你有很高的比例时会有很大的不同。 – 2012-01-23 15:30:07