2011-09-14 18 views
0

假設我有遊戲桌,玩家桌和用戶桌。如何處理MySQL中的大表? (遊戲的數據庫設計)

  • 每場比賽有很多玩家
  • 每位玩家都有一個狀態,像「死」或「活」。所以玩家不是用戶。
  • 每個玩家都有一個用戶

結構看起來很好至今。但是我想知道,如果每天可能有數千場比賽(這種比賽的持續時間很短),每場比賽有10到20名球員......我最終可能會在玩家表中獲得數百萬行比一年多。即使遊戲結束,我也需要讓每個玩家保存在桌面,因爲我希望能夠重放任何遊戲。我很擔心那個時候的表現,選擇和更新會變得越來越慢,對吧?

有什麼想法?

+0

http://www.mysqlperformanceblog.com/2006/06/09/why-mysql-could-be-slow-with-large-tables/ – rwilliams

+1

沒有人(字面上,沒有人)可以設計一個應用程序,將不受一些性能問題的影響。即使twitter和facebook devteams(你知道 - 他們知道他們的工作真的很好)遇到性能問題。所以我建議你從一些常見的模式開始,只要檢測到**真正**瓶頸,就改進它。 – zerkms

+0

是的,但我更喜歡按設計做事。例如,如果我的計算結果告訴我我每天會有1M新的行數,那麼在開始之前我不得不停下來重新考慮整個事情,而不是等待它成爲每週「真正的瓶頸」後來。 – HappyDeveloper

回答

2

本質上它是一個可伸縮性的問題。因爲可擴展性幾乎是所有流行的網站,遊戲等都遇到的問題,所以存在一系列解決方案。首先,考慮到合理的數據庫設計和索引的使用,現代數據庫可以處理數百萬行數據。如果您的遊戲非常流行,以至於數據的增長超出了現代數據庫所能處理的範圍,並且您的企業有一些商業模式,那麼您可能會賺到足夠的錢聘請頂尖的專家來幫助解決這個問題。

如果您剛開始實施遊戲,我建議您稍後對數據庫和查詢進行微調,而性能瓶頸將出現在不同的地方,而不是您期望的地方。不要過早地優化:)

+0

謝謝,但正如我所說,我不認爲這是過早的優化。我只是不想開始構建一些設計上不能順利運行的東西。 – HappyDeveloper

1

是的很長時間後,會有一些關於性能的問題,但對這些表字段的適當索引將使它更容易。

跟蹤您桌上所有即將到來的選擇和更新查詢,並做適當的索引。

你可以參考How MySQL Uses IndexesEXPLAIN Output Format

你也可以認爲一些邏輯來一段時間後存檔一些遊戲或記錄(如1個月或2個月)與相同結構的另一個表。

+1

嘿,將舊遊戲存檔到一張單獨的桌面聽起來像是一個好主意。這可能是答案 – HappyDeveloper