游戲服務(wù)器與數(shù)據(jù)庫的交互方法和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)游戲領(lǐng)域,特別涉及一種游戲服務(wù)器與數(shù)據(jù)庫的交互方法和系統(tǒng)。
【背景技術(shù)】
[0002]網(wǎng)絡(luò)游戲中包含了大量數(shù)據(jù),這些數(shù)據(jù)主要可以分成兩類:一類是動態(tài)的用戶相關(guān)數(shù)據(jù)、一類是靜態(tài)的系統(tǒng)配置數(shù)據(jù),所有這些數(shù)據(jù)都存儲在網(wǎng)絡(luò)游戲服務(wù)器上的數(shù)據(jù)庫管理系統(tǒng)(DBMS)中。網(wǎng)絡(luò)游戲服務(wù)器程序在運(yùn)行的過程中,需要加載、處理和保存所有這些數(shù)據(jù),因此,網(wǎng)絡(luò)游戲服務(wù)器程序需要頻繁地和數(shù)據(jù)庫管理系統(tǒng)進(jìn)行交互。眾所周知,對數(shù)據(jù)庫管理系統(tǒng)的操作屬于1操作,相比于CPU的處理速度,1操作所需要的處理周期是相當(dāng)漫長的,因此,如何維護(hù)這些數(shù)據(jù),便成了決定網(wǎng)絡(luò)游戲服務(wù)器程序運(yùn)行效率的一個最關(guān)鍵的因素。
[0003]在游戲服務(wù)器與數(shù)據(jù)庫的交互中的用戶數(shù)據(jù)維護(hù)和同步的過程中,需要達(dá)到兩個要求上的平衡,如何在需要新的數(shù)據(jù)時,即能夠保證安全性(先生成數(shù)據(jù),后使用數(shù)據(jù)),又能夠保證高效性(不需要同步操作)?目前已有的一些內(nèi)存數(shù)據(jù)庫方案中,都沒有很好地解決這個問題?,F(xiàn)有的方案要么是保證安全性,即在數(shù)據(jù)庫管理系統(tǒng)中先生成這條數(shù)據(jù),之后再在內(nèi)存中加載并使用這條新數(shù)據(jù),這樣做必然導(dǎo)致游戲服務(wù)器進(jìn)程等待,效率低;要么是保證高效性,先在內(nèi)存中生成一條內(nèi)存數(shù)據(jù),然后直接使用,之后再在某個時機(jī)同步數(shù)據(jù)庫管理系統(tǒng),這樣做效率很高,需要新數(shù)據(jù)時馬上就可以取用,但是當(dāng)游戲服務(wù)器進(jìn)程出現(xiàn)異常時,有可能導(dǎo)致內(nèi)存數(shù)據(jù)未被同步到數(shù)據(jù)庫管理系統(tǒng)中,安全性較低。為了解決這個問題,需要提供一種既能保證安全性,又兼顧高效性的技術(shù)方案。
【發(fā)明內(nèi)容】
[0004]為此,需要提供一種能同時兼顧安全性與高效性的游戲服務(wù)器與數(shù)據(jù)庫的交互方法和系統(tǒng)。
[0005]為實現(xiàn)上述目的,發(fā)明人提供了一種游戲服務(wù)器與數(shù)據(jù)庫的交互方法,包括步驟:
[0006]游戲服務(wù)器在內(nèi)存中執(zhí)行數(shù)據(jù)處理,并將處理結(jié)果保存于內(nèi)存;
[0007]游戲服務(wù)器通過多線程方式將所述處理結(jié)果同步于數(shù)據(jù)庫。
[0008]進(jìn)一步地,所述的游戲服務(wù)器與數(shù)據(jù)庫的交互方法中,所述數(shù)據(jù)處理包括生成用戶數(shù)據(jù);
[0009]步驟“游戲服務(wù)器在內(nèi)存中執(zhí)行數(shù)據(jù)處理,并將處理結(jié)果保存于內(nèi)存”具體包括:
[0010]游戲服務(wù)器生成用戶緩存數(shù)據(jù)記錄并將其保存于內(nèi)存中的緩存數(shù)據(jù)集,所述用戶緩存數(shù)據(jù)記錄包括一實質(zhì)判別字段,所述實質(zhì)判別字段的屬性包括空數(shù)據(jù)或用戶真實數(shù)據(jù);
[0011]當(dāng)游戲服務(wù)器判定需要生成新的用戶真實數(shù)據(jù)時,在所述緩存數(shù)據(jù)集中查找是否有可用的緩存數(shù)據(jù)記錄,若有則直接調(diào)取并將其中的空數(shù)據(jù)替換為所述用戶真實數(shù)據(jù),并分配同步數(shù)據(jù)修改結(jié)果任務(wù)于一第三子線程,所述第三子線程將所述處理結(jié)果同步于數(shù)據(jù)庫。
[0012]進(jìn)一步地,所述的游戲服務(wù)器與數(shù)據(jù)庫的交互方法中,所述數(shù)據(jù)處理還包括刪除用戶數(shù)據(jù);
[0013]步驟“游戲服務(wù)器在內(nèi)存中執(zhí)行數(shù)據(jù)處理,并將處理結(jié)果保存于內(nèi)存”還包括:
[0014]游戲服務(wù)器需要刪除用戶真實數(shù)據(jù)時,將相應(yīng)的緩存數(shù)據(jù)記錄中的用戶真實數(shù)據(jù)以空數(shù)據(jù)替換、修改其實質(zhì)判別字段為空數(shù)據(jù),并保存于內(nèi)存中的緩存數(shù)據(jù)集;
[0015]然后分配同步數(shù)據(jù)修改結(jié)果任務(wù)于一第四子線程,所述第四子線程將所述處理結(jié)果同步于數(shù)據(jù)庫。
[0016]進(jìn)一步地,所述的游戲服務(wù)器與數(shù)據(jù)庫的交互方法中,第三子線程或第四子線程將所述處理結(jié)果同步于數(shù)據(jù)庫具體包括:
[0017]以預(yù)設(shè)頻率監(jiān)控用戶數(shù)據(jù)修改處理;所述用戶數(shù)據(jù)修改處理包括預(yù)設(shè)類別用戶數(shù)據(jù)修改處理與非預(yù)設(shè)類別用戶數(shù)據(jù)修改處理;
[0018]當(dāng)子線程監(jiān)測到預(yù)設(shè)類別用戶數(shù)據(jù)發(fā)生修改處理時,以即時模式將修改處理結(jié)果同步于數(shù)據(jù)庫;
[0019]當(dāng)?shù)谌泳€程監(jiān)測到非預(yù)設(shè)類別用戶數(shù)據(jù)發(fā)生修改處理時,以非即時模式將修改處理結(jié)果同步于數(shù)據(jù)庫。
[0020]進(jìn)一步地,所述的游戲服務(wù)器與數(shù)據(jù)庫的交互方法中,所述第三子線程或第四子線程將修改處理結(jié)果同步于數(shù)據(jù)庫具體包括:
[0021]以SQL合并算法對同一數(shù)據(jù)庫表記錄的修改SQL進(jìn)行合并。
[0022]進(jìn)一步地,所述的游戲服務(wù)器與數(shù)據(jù)庫的交互方法中,還包括步驟:
[0023]游戲服務(wù)器開啟一第五子線程,所述第五子線程用于監(jiān)控緩存數(shù)據(jù)集并保證所述緩存數(shù)據(jù)集中的緩存數(shù)據(jù)記錄數(shù)量處于一預(yù)設(shè)區(qū)間。
[0024]進(jìn)一步地,所述的游戲服務(wù)器與數(shù)據(jù)庫的交互方法中,在步驟“游戲服務(wù)器在內(nèi)存中執(zhí)行數(shù)據(jù)處理”之前還包括步驟:
[0025]游戲服務(wù)器從數(shù)據(jù)庫中加載配置數(shù)據(jù)。
[0026]進(jìn)一步地,所述的游戲服務(wù)器與數(shù)據(jù)庫的交互方法中,所述配置數(shù)據(jù)包括程序數(shù)據(jù)或用戶數(shù)據(jù)。
[0027]進(jìn)一步地,所述的游戲服務(wù)器與數(shù)據(jù)庫的交互方法中,游戲服務(wù)器從數(shù)據(jù)庫中加載程序數(shù)據(jù)具體包括:
[0028]游戲服務(wù)器分配程序數(shù)據(jù)加載任務(wù)于一第一子線程,在所述第一子線程加載程序數(shù)據(jù)時,服務(wù)器主線程處于等待狀態(tài),并在收到所述第一子線程發(fā)送的程序數(shù)據(jù)加載完成通知信號后恢復(fù)運(yùn)行。
[0029]進(jìn)一步地,所述的游戲服務(wù)器與數(shù)據(jù)庫的交互方法中,游戲服務(wù)器從數(shù)據(jù)庫中加載用戶數(shù)據(jù)具體包括:
[0030]服務(wù)器主線程接收用戶操作請求,并將所述用戶操作請求對應(yīng)的用戶數(shù)據(jù)加載任務(wù)分配于內(nèi)存池中一第二子線程;
[0031]在所述第二子線程執(zhí)行所述用戶操作請求對應(yīng)的用戶數(shù)據(jù)加載任務(wù)時,服務(wù)器主線程不執(zhí)行所述用戶操作請求,并在收到所述第二子線程發(fā)送的用戶數(shù)據(jù)加載任務(wù)完成通知信號后執(zhí)行所述用戶操作請求。
[0032]發(fā)明人同時還提供了一種游戲服務(wù)器與數(shù)據(jù)庫的交互系統(tǒng),包括游戲服務(wù)器與數(shù)據(jù)庫;所述游戲服務(wù)器包括主處理單元、內(nèi)存儲單元和同步單元;
[0033]所述主處理單元用于在所述內(nèi)存儲單元中執(zhí)行數(shù)據(jù)處理,并將處理結(jié)果保存于所述內(nèi)存儲單元;
[0034]所述同步單元用于通過多線程方式將所述處理結(jié)果同步于數(shù)據(jù)庫。
[0035]進(jìn)一步地,所述的游戲服務(wù)器與數(shù)據(jù)庫的交互系統(tǒng)中,所述游戲服務(wù)器還包括判斷單元;所述主處理單元包括數(shù)據(jù)生成模塊;
[0036]所述數(shù)據(jù)生成模塊用于生成用戶緩存數(shù)據(jù)記錄并將其保存于內(nèi)存儲單元中的緩存數(shù)據(jù)集,所述用戶緩存數(shù)據(jù)記錄包括一實質(zhì)判別字段,所述實質(zhì)判別字段的屬性包括空數(shù)據(jù)或用戶真實數(shù)據(jù);
[0037]當(dāng)判斷單元判定需要生成新的用戶真實數(shù)據(jù)時,數(shù)據(jù)生成模塊在所述緩存數(shù)據(jù)集中查找是否有可用的緩存數(shù)據(jù)記錄,若有則直接調(diào)取并將其中的空數(shù)據(jù)替換為所述用戶真實數(shù)據(jù);主處理單元分配同步數(shù)據(jù)修改結(jié)果任務(wù)于同步單元中的一第三子線程,所述第三子線程將所述處理結(jié)果同步于數(shù)據(jù)庫。
[0038]進(jìn)一步地,所述的游戲服務(wù)器與數(shù)據(jù)庫的交互系統(tǒng)中,所述主處理單元還包括數(shù)據(jù)刪除t吳塊;
[0039]當(dāng)判斷單元判定需要刪除用戶真實數(shù)據(jù)時,所述數(shù)據(jù)刪除模塊將相應(yīng)的緩存數(shù)據(jù)記錄中的用戶真實數(shù)據(jù)以空數(shù)據(jù)替換、修改其實質(zhì)判別字段為空數(shù)據(jù),并保存于內(nèi)存儲單元中的緩存數(shù)據(jù)集;
[0040]然后主處理單元分配同步數(shù)據(jù)修改結(jié)果任務(wù)于同步單元中的一第四子線程,所述第四子線程將所述處理結(jié)果同步于數(shù)據(jù)庫。
[0041]進(jìn)一步地,所述的游戲服務(wù)器與數(shù)據(jù)庫的交互系統(tǒng)中,第三子線程或第四子線程將所述處理結(jié)果同步于數(shù)據(jù)庫具體包括:
[0042]以預(yù)設(shè)頻率監(jiān)控用戶數(shù)據(jù)修改處理;所述用戶數(shù)據(jù)修改處理包括預(yù)設(shè)類別用戶數(shù)據(jù)修改處理與非預(yù)設(shè)類別用戶數(shù)據(jù)修改處理;
[0043]當(dāng)?shù)谌泳€程或第四子線程監(jiān)測到預(yù)設(shè)類別用戶數(shù)據(jù)發(fā)生修改處理時,以即時模式將修改處理結(jié)果同步于數(shù)據(jù)庫;
[0044]當(dāng)?shù)谌泳€程或第四子線程監(jiān)測到非預(yù)設(shè)類別用戶數(shù)據(jù)發(fā)生修改處理時,以非即時模式將修改處理結(jié)果同步于數(shù)據(jù)庫。
[0045]進(jìn)一步地,所述的游戲服務(wù)器與數(shù)據(jù)庫的交互系統(tǒng)中,所述第三子線程或第四子線程將修改處理結(jié)果同步于數(shù)據(jù)庫具體包括:
[0046]以SQL合并算法對同一數(shù)據(jù)庫表記錄的修改SQL進(jìn)行合并。
[0047]進(jìn)一步地,所述的游戲服務(wù)器與數(shù)據(jù)庫的交互系統(tǒng)中,所述同步單元還用于開啟一第五子線程,所述第五子線程用于監(jiān)控緩存數(shù)據(jù)集并保證所述緩存數(shù)據(jù)集中的緩存數(shù)據(jù)記錄數(shù)量處于一預(yù)設(shè)區(qū)間。
[0048]進(jìn)一步地,所述的游戲服務(wù)器與數(shù)據(jù)庫的交互系統(tǒng)中,所述游戲服務(wù)器還包括配置加載單元,所述配置加載單元用于從數(shù)據(jù)庫中加載配置數(shù)據(jù)。
[0049]進(jìn)一步地,所述的游戲服務(wù)器與數(shù)據(jù)庫的交互系統(tǒng)中,所述配置數(shù)據(jù)