2012-01-23 118 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