當前位置:首頁 » 操作系統 » 戰場資料庫

戰場資料庫

發布時間: 2023-06-27 01:10:35

1. 魔獸世界用的什麼資料庫

引用自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 ties 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 proction on-call support.
Maintain and enhance existing databases.
Perform routine database maintenance.
Work with end users to ensure smooth proction 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

2. 資料庫索引有什麼作用和好處

資料庫索引是為了增加查詢速度而對表欄位附加的一種標識。見過很多人機械的理解索引的概念,認為增加索引只有好處沒有壞處。這里想把之前的索引學習筆記總結一下:
首先明白為什麼索引會增加速度,DB在執行一條Sql語句的時候,默認的方式是根據搜索條件進行全表掃描,遇到匹配條件的就加入搜索結果集合。如果我們對某一欄位增加索引,查詢時就會先去索引列表中一次定位到特定值的行數,大大減少遍歷匹配的行數,所以能明顯增加查詢的速度。那麼在任何時候都應該加索引么?這里有幾個反例:1、如果每次都需要取到所有表記錄,無論如何都必須進行全表掃描了,那麼是否加索引也沒有意義了。2、對非唯一的欄位,例如「性別」這種大量重復值的欄位,增加索引也沒有什麼意義。3、對於記錄比較少的表,增加索引不會帶來速度的優化反而浪費了存儲空間,因為索引是需要存儲空間的,而且有個致命缺點是對於update/insert/delete的每次執行,欄位的索引都必須重新計算更新。
那麼在什麼時候適合加上索引呢?我們看一個Mysql手冊中舉的例子,這里有一條sql語句:
SELECT
c.companyID,
c.companyName
FROM
Companies
c,
User
u
WHERE
c.companyID
=
u.fk_companyID
AND
c.numEmployees
>=
0
AND
c.companyName
LIKE
'%i%'
AND
u.groupID
IN
(SELECT
g.groupID
FROM
Groups
g
WHERE
g.groupLabel
=
'Executive')
這條語句涉及3個表的聯接,並且包括了許多搜索條件比如大小比較,Like匹配等。在沒有索引的情況下Mysql需要執行的掃描行數是77721876行。而我們通過在companyID和groupLabel兩個欄位上加上索引之後,掃描的行數只需要134行。在Mysql中可以通過Explain
Select來查看掃描次數。可以看出來在這種聯表和復雜搜索條件的情況下,索引帶來的性能提升遠比它所佔據的磁碟空間要重要得多。
那麼索引是如何實現的呢?大多數DB廠商實現索引都是基於一種數據結構——B樹。因為B樹的特點就是適合在磁碟等直接存儲設備上組織動態查找表。B樹的定義是這樣的:一棵m(m>=3)階的B樹是滿足下列條件的m叉樹:
1、每個結點包括如下作用域(j,
p0,
k1,
p1,
k2,
p2,
...
ki,
pi)
其中j是關鍵字個數,p是孩子指針
2、所有葉子結點在同一層上,層數等於樹高h
3、每個非根結點包含的關鍵字個數滿足[m/2-1]<=j<=m-1
4、若樹非空,則根至少有1個關鍵字,若根非葉子,則至少有2棵子樹,至多有m棵子樹
看一個B樹的例子,針對26個英文字母的B樹可以這樣構造:
可以看到在這棵B樹搜索英文字母復雜度只為o(m),在數據量比較大的情況下,這樣的結構可以大大增加查詢速度。然而有另外一種數據結構查詢的虛度比B樹更快——散列表。Hash表的定義是這樣的:設所有可能出現的關鍵字集合為u,實際發生存儲的關鍵字記為k,而|k|比|u|小很多。散列方法是通過散列函數h將u映射到表T[0,m-1]的下標上,這樣u中的關鍵字為變數,以h為函數運算結果即為相應結點的存儲地址。從而達到可以在o(1)的時間內完成查找。
然而散列表有一個缺陷,那就是散列沖突,即兩個關鍵字通過散列函數計算出了相同的結果。設m和n分別表示散列表的長度和填滿的結點數,n/m為散列表的填裝因子,因子越大,表示散列沖突的機會越大。
因為有這樣的缺陷,所以資料庫不會使用散列表來做為索引的默認實現,Mysql宣稱會根據執行查詢格式嘗試將基於磁碟的B樹索引轉變為和合適的散列索引以追求進一步提高搜索速度。我想其它資料庫廠商也會有類似的策略,畢竟在資料庫戰場上,搜索速度和管理安全一樣是非常重要的競爭點。

3. mangos資料庫如何升級

這個東西整理了很久了,結構大同小異,部分漢化說明也有前人做過,不能算原創,只能說站在巨人的肩膀上,貌似3.13更新了一些地方,但是國外還沒有對於跟新的部分進行說明,同時也廢除了一些結構設置,附上部分作廢的結構說明,以備大家使用。其次是GM把我的一個沒有滿80的小號刪掉了,辛苦積攢的1W金幣一下子就沒有了,分個裝備也挺費勁,時間也不多,還是搞點研究跟大家分享算了,一切過眼雲煙……
MANGOS資料庫表格含義
角色資料庫:characters
==================================================
account_data 特徵帳戶
arena_team 競技場隊伍信息
arena_team_member 競技場隊伍成員
arena_team_stats 競技點數統計
auctionhouse 拍賣行(參數--觀看時所對應)
battleground_template 戰場競技場基本配置
bugreport 給GM發信所對應的數據
character_achievement
character_achievement_progress
character_action 創建的人物所會的技能對應playercreateinfo_action(僅出生)
character_aura 角色的 BUF 效果
character_homebind 創建人物的爐石回城所綁定的地點(或出生地點)
character_instance 角色玩家副本信息
character_inventory 創建人物身上和背包內的道具
character_kill 角色的榮譽信息(殺或被殺,有無榮譽等)(TYPE=1 獲得,2=損失)
character_pet 創建人物的寵物信息
character_pet_declinedname
character_queststatus 創建人物的任務信息
character_reputation 創建人物的陣營聲望
character_social 好友列表
character_spell 人物的技能列表(僅會魔法的人才會出現ID)
character_spell_cooldown 人物技能的冷卻時間
character_ticket 角色傳送點信息
character_tutorial 角色補習,講解信息(例如游戲里的幫助內容和上線的一些提示信息)
character 創建的人物資料對應playercreateinfo
corpse 角色死亡後屍體相關的信息(這里有對應記錄時角色即為死亡狀態,包括屍體對應的墓地信息等,官服此表每星期清一次)
group_instance
group_member 隊伍成員(登陸132錯誤多為不同陣營間組隊造成,清除玩家的隊伍就可以了)
groups 組隊,團隊信息
guild 工會信息
guild_bank_eventlog 工會銀行事件記錄
guild_bank_item 工會銀行的物品
guild_bank_right 工會銀行使用等級
guild_bank_tab 工會銀行的存放槽
guild_eventlog 工會事件記錄
guild_member 工會成員
guild_rank 工會的階級劃分記錄信息
instance 副本記錄(臨時表)記錄玩家開啟的副本並對重置時間進行計時
instance_template FB信息(包括地圖、要求進入的等級、人數上限、重置時間)
item_enchantment_template 道具的魔法模版
item_instance 物品信息
instance_reset 重新設定信息
item_template 道具及任務道具的詳細信息
item_loot_template 道具掉落表
item_text 道具說明(item_template相關欄位)
mail 郵件系統
mail_items 郵寄道具
pet_aura 寵物光環模型
pet_spell 寵物學的技能
pet_spell_cooldown 寵物技能的冷卻時間
petition 已被召喚的寵物,對應角色GUID
petition_sign 寵物歸屬哪個角色標志
saved_variables 不定時保存信息
主資料庫:mangos
=============================================
achievement_reward 添加巫妖王的獎勵成就
areatrigger_involvedrelation 傳送(區域觸發)_包含的任務關系
areatrigger_scripts 區域觸發腳本
areatrigger_tavern 進傳送門id指向areatrigger_teleport----OK觸發
areatrigger_teleport
areatrigger_template 傳送區域的具體坐標(與travern所對應)
battleground_template 戰場競技場基本配置
battlemaster_entry 戰場管理NPC分管的戰場(NPC的entry對應戰場的ID)
command GM命令
creature 地圖刷怪配置
creature_addon 生物刷怪補充(即根據GUID的不同一個生物通過此表可定義為不同屬性的)
creature_equip_template 生物身上的裝備模板庫(creature_template調用這里的內容,如用什麼武器和盾等)
creature_involvedrelation NPC或怪物(特殊類)參與的任務關系,所涉及的關系
creature_loot_template 生物的掉率
creature_model_info 生物模型信息庫(creature_template調用這里的內容)
creature_movement 怪物或NPC移動的關系,活動范圍
creature_onkill_reputation 生物被殺聲譽配置
creature_questrelation 怪物觸發的任務關系
creature_respawn 生物再生(臨時表)針對creature里的生物時間被殺死後進行記錄。
creature_template 怪物或NPC的具體信息如HP,SP等
creature_template_addon 怪物或NPC的具體信息補充(即相同的生物可以設置不同的屬性)
db_script_string 資料庫腳本處理
db_version 資料庫版本說明
disenchant_loot_template 附魔合成出產物品表
event_scripts 事件腳本
exploration_basexp 等級和基本經驗配置
fishing_loot_template 釣魚出的爆率配置
game_event 游戲事件,定時觸發
game_event_creature 游戲事件由生物觸發
game_event_creature_quest 由生物來處理的游戲事件內的任務和問題
game_event_gameobject 游戲事件由對象觸發
game_event_model_equip 游戲事件中發重變動的模型裝備配置
game_event_pool 游戲共用事件
game_graveyard_zone 地圖區域連接墓地配置
game_tele 游戲不同區域的廣播視頻信息
game_weather 天氣系統(可以為不同的區域配置不同的天氣變化)
gameobject 世界刷對象配置物品信息(地上的箱子,草,礦)僅刷新點,時間,位置
gameobject_involvedrelation 對象參與的任務關系,所涉及的關系
gameobject_loot_template 對象爆率,地上的箱子、礦石、花草
gameobject_questrelation 對象觸發的任務關系
gameobject_respawn 對象再生(臨時表)(如gameobject刷出的對象箱子等在被打開後這里就開始計時)
gameobject_scripts 對象腳本
gameobject_template 對象具體信息配置,如草,礦等
instance_template 副本配置(等級、團隊限止和副本AI腳本控制等)
item_enchantment_template 附魔產品配置
item_loot_template 包里的箱子之類爆率
item_template 道具及任務物品的詳細信息
locales_achievement_reward 完成給予的獎勵
locales_creature 生物名七國語言支持
locales_gameobject 世界對象七國語言支持
locales_item 物品名稱七國語言支持
locales_npc_option NPC的選擇
locales_npc_text NPC對話七國語言支持
locales_page_text 其它對話七國語言支持
locales_points_of_interest
locales_quest 任務對話七國語言支持
mangos_string 系統提示信息自定義表
milling_loot_template 最小掉落模版
npc_gossip NPC對話索引,沒事說的話,如有些副本人物一進入就可以看到BOSS遇到你說的話
npc_gossip_textid 話的內容對應NPC_gossip
npc_option 共50條記錄,NPC的類型
npc_text 跟NPC說話的內容,不同於任務內容,此內容大多是通過AI實現調用
npc_trainer 訓練師所對應的內容(學習技能要求的等級, 金錢, 前置技能等)
npc_vendor 賣東西的NPC所對應的商品配置
page_text 對話提示內容不同於任務
pet_levelstats 寵物等級初始定義
pet_name_generation 寵物名稱替換定義
petcreateinfo_spell 寵物法術信息
pickpocketing_loot_template 盜賊偷竊爆率(可以得到的物品配置)
player_classlevelstats 人物升級基礎加成倍(血、魔法……)
player_levelstats 出生等級
player_xp_for_level 玩家升級所需得升級經驗
playercreateinfo 人物出生的信息,根據種族配置出生時所在的地圖坐標等
playercreateinfo_action 出生時快捷鍵的技能圖標
playercreateinfo_item 出生時身上道具
points_of_interest
pool_creature 所有池塘中游戲事件的情況
pool_gameobject 生物的GUID
pool_pool
pool_template 池塘生物模版
prospecting_loot_template 采礦爆率
quest_end_scripts 任務結束腳本(例如完成風劍任務召喚桑德蘭王子就是調用這里)
quest_mail_loot_template
quest_start_scripts 任務開始腳本(按任務時觸發的劇情配置)
quest_template 任務的詳細信息(可接范圍等)對應QUESTID可能跟object_involvedrelation有關系
reference_loot_template 掉落參考模版
reserved_name 保留名稱為不可被其它用戶所注冊
skill_discovery_template 技能規定必要條件要求模板(處理某些技能,規定發現的機會大小)
skill_extra_item_template 道具額外獎勵技能模版
skill_fishing_base_level 釣魚基礎的登記
skinning_loot_template 剝皮爆率
spell_affect 法術觸發技能或效果處理
spell_area 法術范圍
spell_chain 法術的鏈接處理(設置某一法術的前置技能和順序等)
spell_elixir 煉金技能
spell_learn_spell 可以學習的法術
spell_proc_event 法術的過程事件
spell_script_target
spell_scripts 法術腳本
spell_target_position 遠程傳送,產生法術結果通過SPELL_EFFECT_TELEPORT_UNITS協調
spell_threat 給予或者取消所有法術擁有的威脅值
transports 運輸配置
登錄控制資料庫:realmd
=============================================================
account 賬號具體ID等信息
account_banned 被禁止的賬號
autobroadcast 自動公告表
creature 地圖刷怪配置
db_version 登錄控制資料庫的版本和所支持客戶端的標識
ip_banned 被禁止的IP
localization 語言環境設置
realmcharacters 登錄器角色所登錄的伺服器主資料庫信息(即為一個登錄資料庫對應多個主控制器時分配標識)
realmd_db_version
realmlist 登錄控制器列表(設置對外開放的登錄IP和埠號等)
uptime SERVER正常運行的時間
更新廢棄
spell_bonus_data 法術加成資料庫
spell_disabled 禁用技能
spell_pet_auras 寵物技能模版
spell_script_target 法術腳本目標(技能圖騰,type=0對應世界對象ID或type=1對應生物ID,或type=2為必須死亡的生物(被人或NPC殺死的))
playercreateinfo_reputation 出生時各個派別的聲望
playercreateinfo_skill 出生時所會的技能
playercreateinfo_spell 出生時所會的法術(同上,數據表內容很像,但有出入,法術和技能是兩個不同的概念)
player_levelstats 初始人物等級配置定義
pet_levelstats 寵物的等級信息(規定的幾個寵物 如 SS 的小鬼 虛空等)
pet_name_generation 寵物名稱的產生,對應與規定的寵物
petcreateinfo_spell creature表中能作為寵物的怪物技能列表
spell_learn_skill 可以學習的技能
spell_proc_event 法術的過程事件
spell_teleport 法術傳送(和areatrigger_teleport傳送門基本一樣)
spell_threat 法術的威脅(仇恨)
button_scripts 滑鼠右鍵按鈕觸發的腳本配置(如開箱子或開門等而觸發劇情控制)
uptime 系統運行時間記錄
taxi_node WOW的飛機系統(具體不明)
taxi_path 飛到哪的價格什麼的吧(不明)
taxi_pathnode 飛機的完整表(對應taxi_NODE taxi_path)
game_talent 游戲的天賦系統
game_graveyard 人物死亡後所回到的墓地(復活需要對應game_corpse表)
game_spell 魔法(參數有可以創造什麼,比如FS做水)
gameobject_grid 可以拿取的有效距離(不明)
item_trainer 傳送寶石技能師
item_vendor 傳送寶石商店
npc_SpiritHealer 靈魂醫者表
petcreateinfo_spell 寵物法術初始定義
zone_coordinate 地區id,地區名字縮寫,例: Orgrimmar => Orgi

熱點內容
A7S24K存儲卡 發布:2025-03-20 16:49:40 瀏覽:968
編程1對一 發布:2025-03-20 16:47:09 瀏覽:438
唱吧的文件夾是哪個 發布:2025-03-20 16:45:30 瀏覽:299
浪潮實體伺服器如何在電腦上配置 發布:2025-03-20 16:43:06 瀏覽:250
編程里的等於 發布:2025-03-20 16:22:02 瀏覽:917
ise綜合與編譯 發布:2025-03-20 16:13:22 瀏覽:880
linux文件句柄 發布:2025-03-20 16:11:55 瀏覽:637
如來神掌原始登錄密碼多少 發布:2025-03-20 16:06:32 瀏覽:320
保電訪問 發布:2025-03-20 16:06:23 瀏覽:146
08年雅閣都有什麼配置 發布:2025-03-20 15:55:48 瀏覽:909