當前位置:編程學習大全網 - 行動軟體 - 魔獸世界用的什麽數據庫?

魔獸世界用的什麽數據庫?

引用自cnblogs@Zealic:

最近幾天重溫了壹下WOW,結合最近學習的數據庫知識和自己的了解,對WOW的大概體系做了分析。當然,我僅僅只是窺豹見斑而已,希望對WOW有所了解的大俠能給我和向了解WOW的人指點;讓世人更加了解WOW,讓中國的遊戲能夠學習(不是抄襲)並超越WOW。

不知道哪來的想法,就想到了WOW的數據庫的結構以及程序實現,那麽,就來了解壹下吧。

首先想到:Game Server 使用的是什麽OS和Database

起初猜測為 : Unix/BSD ,數據庫為 Oracle

這樣比較適合WOW這樣的大型網絡遊戲,因為其存儲和數據量極大

網上查到的壹些關鍵資料,可以證明我的猜想和實際相差不大

1.9C在壹次服務器故障中的說明,下面只列出關鍵部分

08:29 收到EVA存儲報警郵件,聯系數據中心工程師,聯系惠普工程師.

08:35 故障應急流程啟動,相關人員包括THE9/HP/Blizzard US .

15:33 Oracle專家加入故障應急流程

15:50 暴雪數據庫工程師開始與Oracle專家繼續分析故障情況.

17:15 暴雪表示暫時還未從他們的admin以及DBA處獲得任何有新的消息,他們仍然在研究此故障。

2.Blizzard的數據庫管理員招聘要求

Oracle Database Administrator

The World of Warcraft development team is looking for a self-motivated and knowledgeable IT professional to help administer the WoW databases. As the person responsible for handling the database-side of WoW pushes and patches, our Live Team Oracle DBA's job duties would include designing, configuring, maintaining, monitoring, benchmarking and troubleshooting Oracle databases.

Blizzard offers a fun, creative, and technically challenging environment with excellent compensation and a full range of benefits.

Responsibilities:

Provide production on-call support.

Maintain and enhance existing databases.

Perform routine database maintenance.

Work with end users to ensure smooth production rollouts and pushes.

Assist in training other employees.

Requirements:

3+ years professional Oracle DBA experience, including Oracle 9i.

Extensive experience with database performance tuning.

Experience working with large databases (>1TB).

Experience with Oracle RAC and Partitioning features.

Proficiency in Linux/Unix environments including shell scripting.

Plusses:

Strong knowledge of SQL & PL/SQL.

Familiarity with UNIX tools and shell scripting

Familiarity with HP EVA's and Data Protector.

Passion for video games, including MMORPG's

因此WOW的服務器應該為 : HPUNIX + ORACLE

那麽我就對WOW的數據庫做壹些猜想,至於正確與否或者符合程度集合,就無從而知了

主要分為以下幾塊

-遊戲服務器:

這裏說的是遊戲中的服務器,而非上面提到的物理意義上的服務器,比如,七區的惡魔之魂、黑鐵、加基森就是遊戲服務器。

-遊戲區:

遊戲大區,壹個大區是由許多個遊戲服務器構成的。之所以分大區,我認為完全是因為物理原因,每個區都其物理構成應應該是壹個服務器群集,而在這群集上,有許多的數據庫實例,每壹個數據庫實例都對應壹個遊戲服務器。

-驗證系統:

遊戲中的登錄、排隊、驗證身份應該都是又這壹部分完成的。

-聊天頻道:

聊天頻道是壹個獨立的服務器,這壹點可以從遊戲中人物、地圖都很卡而聊天卻完全不受影響的情況分析出來,聊天不可以離線發送消息,因此我可以武斷的認為,聊天服務器基本不操作數據庫,至多在當前無法處理或者玩家暫時接收不到的情況下,使用壹些臨時的表來保存消息;或者服務器將聊天數據全部保存到數據庫中,以方便對玩家的行為查詢。

另外,聊天服務器是獨立於所有服務器的,每個區的所有遊戲服務器都是使用對應於該區的聊天服務器。這樣,可以專門針對聊天服務器的特性,對服務器的系統和數據庫進行專門的優化

-副本&戰場:

副本&戰場(以下簡稱副本)我覺得也應該和聊天服務器相同,是個獨立的服務器,不過他與普通遊戲服務器不同,並沒有保存其他的地圖數據,僅僅保存了副本地圖的數據。

至於如何實現跨服戰場,我以為,應該是將需要的角色數據做拷貝到副本服務器中,並且鎖定原本服務器中的數據(表或行),在退出戰場時,用副本服務器的數據更新原來的數據。我們可以把戰場看做數據庫中的臨時表,做了處理以後更新到需要保存的地方。

通過上述解釋,也可以理解為什麽在進入戰場時需要加載畫面了,加載畫面並不僅僅是作為壹個過渡畫面,它還承載了加載客戶端資源,與服務端通信進行處理;顯示加載畫面時,副本服務器應該是如上所說遊戲服務器交換了角色數據。

大型副本與普通副本不同的地方,我覺得僅僅是重置時間和副本策略做了改變而已。

-地圖

地圖的定義是在客戶端的資源中的,為防止用戶篡改,BLZ對定義地圖的資源文件和DBC進行使用了混淆命名以及檢查校驗;之所以這麽認為,是因為中國WOW公測的時候,出現壹些加速外掛,可以讓角色直接穿越墻壁、地表等看起來不可能穿越的物體,這便驗證了BLZ為了減輕服務器負擔,直接在客戶端進行了大部分的碰撞檢測。

WOW的的實際地圖結構和遊戲中我們所見到的不壹樣,他是把壹塊大陸分成N個小塊的地圖數據,客戶端僅僅需要加載玩家角色所在位置附近的所有地圖塊就可以了。其技術細節就不做詳細分析了。

-東西大陸:

每個大陸都應該是壹個獨立的數據庫,之所以出現加載畫面,我認為是因為兩個大陸的地形材質大不相同,客戶端需要先釋放出發大陸的所有資源,加載目的大陸的必要資源,同時轉移角色的數據到目的大陸。

-角色:

遊戲中的角色應該是被分離成數個表,包括玩家的屬性,任務,包裹,郵箱,銀行等。壹些重要的,比如物品包裹、郵箱、銀行,服務器會在很短(相對其他數據而言)的時間內將內存中的緩存數據寫入提交到數據庫中;而壹些相較以上數據不是很重要的數據,則需要很長時間才會提交到數據庫。這也解釋了為什麽服務器回檔時,角色的位置和任務等都回檔了,而物品卻沒有回檔,這也造成了傳說中的雙手痛擊。

-怪物:

世界中的怪物生成應該是使用了Prototype模式,那麽保存怪物的數據其實之需要保存其會變化的值就即可。

-其他:

遊戲中總是有壹些事件發生,比如:暗月馬戲團的來訪,萬聖節的活動,情人節的活動等等,這些東西應該都是具有伸縮性的,可以想象,為了方便BLZ自WOW的管理和擴展,在服務器或服務器群集管理中心中,應該有BLZ為自己和代理商提供的工具或者說腳本使用指南。至於WOW采用的腳本是什麽,這個我就猜不到了,可能是Perl\Python\SH吧,反正不會是LUA。

-行為與技能:

為什麽WOW玩起來感覺這麽流暢,沒有其他網絡遊戲看起來或感覺起來反應遲鈍,WOW並沒有每時每刻都與客戶端進行通信;其主要工作原理是,客戶端首先處理用戶的輸入,並執行相應的開始動畫或處理,而實際顯示結果要等待服務端處理並返回後才會顯現出來,這就是為什麽在掉線後,玩家還做操作角色,但是卻無法獲得操作結果。

技能和行為差不多,其實很多遊戲中的限制都是在客戶端進行的,這都是BLZ為了減輕服務端的負擔、減少通信量而造成的。那麽,我在這裏大膽的猜測,只要分析出內存地址或相應代碼,WOW是有很多地方可以被篡改的;因為據我所知,目前WOW的所有外掛都是通過暴力修改客戶端的內存實現的,而非常見的修改網絡封包,BLZ加密還是做的很不錯的 :)。

基本上就分析了這麽多了,我試圖從自己的腦子裏挖出更多的東西,可惜所了解的東西仍然太少,沒辦法,現這樣吧。

----------------------------------------------

PS:大芒果單機版WOW采用的MySQL

  • 上一篇:拼爹拼媽是什麽意思
  • 下一篇:和妳在壹起的演員有哪些
  • copyright 2024編程學習大全網