2012-12-02 26 views
1

我目前正在爲教育目的開發一款遊戲。如何在MySQL數據庫上以較高的查詢率優化Java程序

遊戲是一個小型聊天,每個玩家都有一個人物。這個數字的位置寫在MySQL數據庫中,每次玩家移動他的數字時都會更新。

目前,每60幀,遊戲會更新所有玩家的位置並在遊戲客戶端更改它們。數據庫的性能並不是我唯一關心的問題,因爲這會導致遊戲幀速下降到30-50fps左右。

很顯然,這會爲每位玩家產生1次位置更新查詢(遊戲以60fps運行)。考慮比我大一些,還有一些朋友作爲用戶,我可以想象這可能是一個問題。

標準租用的web服務器能夠處理這個問題嗎?我怎麼能改進它? (它不能更新的位置小於每秒一次)

我希望你有一些想法:-)

+1

保留內存中的位置,而不是在數據庫中。 –

+0

取決於基礎設施,但您可以將緩存保留在內存中(即不要從數據庫讀取數據)並且只能在數據庫中寫入一次。如果服務器出現故障,如果丟失最後幾秒鐘,我認爲這不是災難? –

+0

我將如何讓他們在記憶中?該位置更新,當人們四處移動所有的時間,所以我需要顯示在所有其他客戶端的實際位置,以及 –

回答

1

這種類型的數據是不是真的保存到數據庫中的每一個變化之後,而不是它的保存在某種內存環境下,訪問速度更快。你在數據庫中存儲的是那些頻繁變化的東西,比如每分鐘一次。

您可能要做的是按照定期計劃將當前內存中的上下文快照到數據庫。也就是說,每隔一分鐘左右你就會「堅持」遊戲狀態,以便如果引擎崩潰,它可以從那一點恢復。如果你創建了適當的體系結構,這將不會比定期調用方法更困難。

有些事情可以立即堅持以避免人們利用發生的動作和動作是永久的記錄之間的滯後。例如,任何具有遊戲內貨幣的交易都將被立即記錄下來,而內存緩存將不會被信任。

對於數量較少的玩家,比如不到一百人,使用商品VPS應該沒有問題。要舉辦更多的球員,你必須非常小心才能高效。

0

您可以使用內存中的Java數據庫,該數據庫允許您更頻繁地更新播放器。然後,更改以較低的速率存儲在MySQL數據庫中。