我們都知道MMO遊戲的流行趨勢。球員彼此面對面生活。提高MMO遊戲性能
我關注的領域是存儲玩家動作和遊戲結果。
通過適配器Npgsql的
遊戲客戶端是基於瀏覽器的ASP.NET和所有的數據庫相關處理
理解我的查詢調用Csharp的功能,請考慮使用Csharp的和PostgreSQL V9.0以下場景
我們將遊戲進度存儲在postgres表中。
對於實例比賽有四名球員並按照活動開始
- 每個球員100hitpoints開始
- 播放機1罷工(我們指的是一個圖表,以打擊轉化爲生命值隨機-range%)
- 播放機2具有92HP,並返回一個光吹,所以PLAYER1具有98hp
以上兩個回合,現在將在遊戲進度表,作爲
ROW Player1HP Player2HP Strikefrom StrikeTo ReturnStrikeHP Round TimeStamp StrikeMethod
1 100 100 0 0 0 0
2 98 92 P1 P2 2 1
找到,如果比賽已經結束,我們檢查3名球員都爲零生命值或者gametime已經從去年的進步經過一個規定的超時值
我們桌上有一個主關鍵字,以遊戲者身份爲基礎隨機出現32個字符的代碼(每個玩家8個)
還有其他專欄,如護甲,法力,法術, 48欄 - 每個玩家12個及其屬性
最後,存在具有比賽的結果,tournamentid,tournament_timestamp,gameresult(完整,PlayerSurrender,InvalidSession,SecurityHack,超時),winnerPlayer,playerMetrics,rowIDfrom一個gameResult表,rowIDto
QUERY
我的問題是關於遊戲數據庫或SQL 降低負荷集中查詢
a)如何檢測,如果玩家沒有登錄simutaneously並開了兩個遊戲會話,但不必是指一個數據庫或使用SQL
二)如何控制的記錄激增到GameProgress表。讓玩家更快得到迴應。在服務器啓動滯後在高峯時段或1000名玩家在線
There is a tremendous flow of sql queries, for ex. even in the current game version
There are average/minimum 100 tournaments online per 12 minutes or 500 players/hour
In Game Progress table, We are storing each player move
a 12 round tourament of 4 player there can be 48 records
plus around same number for spells or special items
a total of 96 per tourament or 48000 record inserts per hour (500 players/hour)
我正在使用C#一個後臺進程,即不斷從GameProgresstable移動過期的比賽記錄到另一個數據庫,我們有一個服務器免費還在考慮的遊戲負載。
c)我們應該多久運行一次真空充滿postgres。
我接受新的應用程序opensource或toPay,可以提高性能。例如。我們使用FastCsvReader http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader來改善服務器日誌文件的枚舉。
問候 阿文德
對不起!我忘記在主鍵中提及時間戳,它實際上是tournamentid + gamestarttime的組合。我們不會生成它,相反,我們只需結合所有玩家ID和時間戳,就無法獲得更獨特的功能。 SSD對於這種流量來說是否可靠? Postgres是獨立於驅動器的DB軟件。 – arvind
隨機主鍵列的另一個問題是它傾向於更均勻地分佈哪些索引頁必須在索引掃描上命中。這不一定是好事。 –