欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種游戲服務端數(shù)據(jù)庫優(yōu)化方法及系統(tǒng)與流程

文檔序號:40589706發(fā)布日期:2025-01-07 20:29閱讀:5來源:國知局
一種游戲服務端數(shù)據(jù)庫優(yōu)化方法及系統(tǒng)與流程

本發(fā)明涉及網(wǎng)絡通信,尤其涉及一種游戲服務端數(shù)據(jù)庫優(yōu)化方法及系統(tǒng)。


背景技術:

1、隨著智能手機的迅速普及,與網(wǎng)絡的快速發(fā)展,移動互聯(lián)網(wǎng)的相關業(yè)務已逐漸成為國內(nèi)各廠商關注的焦點。從整體行業(yè)來看,中國手機游戲行業(yè)處于快速發(fā)展期。近年來,在電信運營商和手機游戲開發(fā)商的聯(lián)合推動下,中國的手機游戲行業(yè),取得了較快的發(fā)展。隨著互動娛樂技術的發(fā)展,各種類型的互動游戲類應用得到了極大的發(fā)展,存在著多種游戲類型與游戲控制方式,游戲的形式也從電腦或游戲機向手機游戲方面過度。

2、隨著手機游戲市場蓬勃發(fā)展,業(yè)界常常使用關系型數(shù)據(jù)庫存儲玩家的數(shù)據(jù)。游戲服務端數(shù)據(jù)有以下特點:

3、變更頻率高。例如,玩家合成一個道具,點擊一次養(yǎng)成功能,放一個技能等行為,都可能直接導致多條記錄被修改,刪除或者新增。

4、安全要求高。不允許丟失,不允許不一致,數(shù)據(jù)錯誤導致的經(jīng)濟損失大。

5、容峰要求高。在開服時或者活動開啟的時段,會有大量的玩家短時間內(nèi)集中登錄游戲,造成大量讀壓力;某個活動結束或者結算時,可能有大量的數(shù)據(jù)更新造成寫壓力。

6、多表查詢需求極低。雖然也使用外鍵,但是主從數(shù)據(jù)往往一起加載(比如玩家登錄時),少量的多表查詢需求(比如排行榜)一般使用冗余字段解決,避免額外加載不在線玩家的數(shù)據(jù)。

7、現(xiàn)有技術中的業(yè)界技術方案,一般是使用代碼生成技術,生成專有的數(shù)據(jù)結構映射,在內(nèi)存中直接使用。當玩家登錄時,使用讀線程組從數(shù)據(jù)庫中讀取到內(nèi)存映射機構。當數(shù)據(jù)改變時,直接修改內(nèi)存數(shù)據(jù)。寫線程組定期將修改的數(shù)據(jù),以增量或者全量的寫回數(shù)據(jù)庫。當玩家登出時,從內(nèi)存中卸載,并將積累的寫操作執(zhí)行。

8、這種做法存在著如下缺陷:

9、數(shù)據(jù)一致性沒法保證。當一個數(shù)據(jù)被卸載,又立刻被要求讀取時,如果此時其上次的寫操作沒有執(zhí)行完畢,有可能取到舊數(shù)據(jù),需要在外圍邏輯中增加相應防護。如果將某個表的讀寫線程指定為同一個,則可以保證數(shù)據(jù)一致性,但是沒有合并的大量單記錄修改會嚴重降低性能;同時,單線程讀也會導致巨大的讀性能壓力。

10、容峰能力差。當活動結算時或者較多玩家短時間登出時,積累的寫壓力會被迫一起執(zhí)行,增大了系統(tǒng)的不穩(wěn)定性。

11、數(shù)據(jù)安全性低。因為是定期觸發(fā)的保存,因此在期間的修改可能因為服務器宕機而丟失,需要開發(fā)額外的組件來保護數(shù)據(jù)。

12、因此,現(xiàn)有技術中的數(shù)據(jù)方案雖然可行,但是通用化程度低,而且遺留了一些難以解決的問題。


技術實現(xiàn)思路

1、本發(fā)明提供一種游戲服務端數(shù)據(jù)庫優(yōu)化方法及系統(tǒng),解決現(xiàn)有技術中游戲服務端數(shù)據(jù)操作存在的問題,極大的發(fā)揮關系型數(shù)據(jù)庫性能,發(fā)揮關系型數(shù)據(jù)庫高吞吐量批量寫、高性能并發(fā)讀特性,保證數(shù)據(jù)一致性與數(shù)據(jù)安全性。

2、根據(jù)本發(fā)明的一個方面,提供一種游戲服務端數(shù)據(jù)庫優(yōu)化方法,包括:

3、在游戲服務器與數(shù)據(jù)庫之間增設數(shù)據(jù)庫代理;

4、對游戲服務器發(fā)起的數(shù)據(jù)讀寫操作,數(shù)據(jù)庫代理按數(shù)據(jù)表名哈希hash分配到某一個表服務上執(zhí)行;所述表服務包含若干個數(shù)據(jù)表的寫緩存,同時包含一個數(shù)據(jù)庫寫線程;每個表服務由一個單獨線程驅動;

5、任一個數(shù)據(jù)表的所有在途的修改操作,根據(jù)表的“主鍵->寫緩存記錄列表”組織;所述寫緩存記錄由唯一操作id、字段修改數(shù)據(jù)及寫入狀態(tài)組成;所述唯一操作id隨時間先后自增變大;所述寫入狀態(tài)標記此記錄是否已經(jīng)入庫;

6、數(shù)據(jù)庫寫線程接受對應的表服務定期發(fā)起的批量寫入請求,將數(shù)據(jù)寫入關系數(shù)據(jù)庫,并通知表服務線程寫入結果;

7、數(shù)據(jù)庫讀線程組為公共的線程組,接收所有表服務的調(diào)用,從數(shù)據(jù)庫讀取數(shù)據(jù),并返還給表服務線程。

8、所述數(shù)據(jù)庫代理還包括lsm容災數(shù)據(jù)庫作為容災組件進行數(shù)據(jù)讀寫備份;使用基于log-structured?merge-tree技術的kv數(shù)據(jù)庫,能夠極高性能的寫入數(shù)據(jù),防止丟失寫緩存記錄。

9、所述數(shù)據(jù)庫代理還包括sql?parser模塊,負責將外部請求sql語句轉換為內(nèi)部結構;當數(shù)據(jù)庫代理作為進程內(nèi)組件時,直接使用內(nèi)部結構進行請求。

10、當進行數(shù)據(jù)讀取操作時,流程如下:

11、為當前操作分配唯一操作id;

12、確定當前操作為按主鍵讀取數(shù)據(jù)時,進而確定當前寫緩存中是否存在所述主鍵對應的插入insert操作記錄;若存在,則合并寫緩存中位于所述insert操作之后的所有寫記錄,返回讀取結果;

13、確定當前操作為按條件讀取數(shù)據(jù)或當前寫緩存中不存在所述主鍵對應的插入insert操作記錄時,先從數(shù)據(jù)庫中執(zhí)行查詢;獲取結果之后,再根據(jù)唯一操作id,將其與寫緩存中的位于本讀操作之后的操作合并,按查詢條件二次過濾,獲得最新結果并返回。

14、當進行數(shù)據(jù)寫入操作時,流程如下:

15、為當前操作分配唯一操作id;

16、將寫操作增加到主鍵對應列表尾部,或合并列表中主鍵對應的未寫入操作進行合并寫入。

17、所述寫入操作為定時觸發(fā);具體操作流程如下:

18、遍歷寫緩存中的未寫入操作,生成批量更新數(shù)據(jù);

19、獲取當前數(shù)據(jù)表的寫鎖,根據(jù)寫鎖與批量更新數(shù)據(jù),對數(shù)據(jù)庫批量執(zhí)行寫操作;

20、寫操作執(zhí)行完成后,釋放寫鎖,刪除寫緩存中已經(jīng)完成的寫操作。

21、當數(shù)據(jù)庫代理中存在lsm容災數(shù)據(jù)庫作為容災組件進行數(shù)據(jù)讀寫備份時,每次寫操作進入數(shù)據(jù)表服務后,為當前操作分配唯一操作id保存到lsm容災數(shù)據(jù)庫中;

22、寫操作執(zhí)行完成后,從lsm容災數(shù)據(jù)庫中刪除已經(jīng)完成的寫操作。

23、當進行數(shù)據(jù)的多表查詢時,流程如下:

24、獲取來自服務端的非主鍵條件刪改或跨表查詢請求時,執(zhí)行所述請求中關聯(lián)的數(shù)據(jù)表的寫緩存;暫停關聯(lián)的數(shù)據(jù)表的表服務后,向數(shù)據(jù)庫執(zhí)行相應刪改或查詢操作;

25、操作完成后,回復關聯(lián)的數(shù)據(jù)表的表服務并返回操作結果。

26、根據(jù)本發(fā)明的另一個方面,提供了一種游戲服務端數(shù)據(jù)庫優(yōu)化系統(tǒng),包括設置于服務端與數(shù)據(jù)庫之間的數(shù)據(jù)庫代理,所述數(shù)據(jù)庫代理包括:

27、表服務分配單元,用于對游戲服務器發(fā)起的數(shù)據(jù)讀寫操作,數(shù)據(jù)庫代理按數(shù)據(jù)表名哈希hash分配到某一個表服務上執(zhí)行;所述表服務包含若干個數(shù)據(jù)表的寫緩存,同時包含一個數(shù)據(jù)庫寫線程;每個表服務由一個單獨線程驅動;

28、數(shù)據(jù)表操作單元,用于任一個數(shù)據(jù)表的所有在途的修改操作,根據(jù)表的“主鍵->寫緩存記錄列表”組織;所述寫緩存記錄由唯一操作id、字段修改數(shù)據(jù)及寫入狀態(tài)組成;所述唯一操作id隨時間先后自增變大;所述寫入狀態(tài)標記此記錄是否已經(jīng)入庫;

29、數(shù)據(jù)寫入單元,用于數(shù)據(jù)庫寫線程接受對應的表服務定期發(fā)起的批量寫入請求,將數(shù)據(jù)寫入關系數(shù)據(jù)庫,并通知表服務線程寫入結果;

30、數(shù)據(jù)讀取單元,用于數(shù)據(jù)庫讀線程組為公共的線程組,接收所有表服務的調(diào)用,從數(shù)據(jù)庫讀取數(shù)據(jù),并返還給表服務線程。

31、所述數(shù)據(jù)庫代理,還包括:

32、lsm容災數(shù)據(jù)庫,用于作為容災組件進行數(shù)據(jù)讀寫備份;使用基于log-structuredmerge-tree技術的kv數(shù)據(jù)庫,能夠極高性能的寫入數(shù)據(jù),防止丟失寫緩存記錄;

33、sql?parser模塊,用于負責將外部請求sql語句轉換為內(nèi)部結構;當數(shù)據(jù)庫代理作為進程內(nèi)組件時,直接使用內(nèi)部結構進行請求。

34、采用上述方案的有益效果是:

35、在游戲服務器與數(shù)據(jù)庫之間增設數(shù)據(jù)庫代理;對游戲服務器發(fā)起的數(shù)據(jù)讀寫操作,數(shù)據(jù)庫代理按數(shù)據(jù)表名哈希hash分配到某一個表服務上執(zhí)行;任一個數(shù)據(jù)表的所有在途的修改操作,根據(jù)表的“主鍵->寫緩存記錄列表”組織;數(shù)據(jù)庫寫線程接受對應的表服務定期發(fā)起的批量寫入請求,將數(shù)據(jù)寫入關系數(shù)據(jù)庫,并通知表服務線程寫入結果;數(shù)據(jù)庫讀線程組為公共的線程組,接收所有表服務的調(diào)用,從數(shù)據(jù)庫讀取數(shù)據(jù),并返還給表服務線程。

36、本發(fā)明方案中,根據(jù)手機游戲的實際情景需求,能夠極大的提高游戲數(shù)據(jù)庫的讀寫吞吐速度,完全發(fā)揮數(shù)據(jù)庫的并發(fā)讀性能,完全發(fā)揮數(shù)據(jù)庫的批量寫性能。針對行業(yè)場景,可將大部分寫操作自動合并,大大減輕了數(shù)據(jù)庫壓力。同時,具有極強的容災能力,保證單表級別的一致性,通用程度高,可以作為數(shù)據(jù)庫代理進程來使用。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
韶山市| 临邑县| 紫阳县| 嘉鱼县| 宁蒗| 北海市| 鄂托克前旗| 扎囊县| 许昌市| 毕节市| 西峡县| 额尔古纳市| 左贡县| 化隆| 广州市| 偏关县| 伊通| 太保市| 井冈山市| 通江县| 丽江市| 丹棱县| 淮阳县| 吉木乃县| 介休市| 沙田区| 海盐县| 万州区| 郁南县| 韶关市| 观塘区| 右玉县| 陇川县| 津南区| 南宁市| 应用必备| 贵州省| 潍坊市| 民和| 元江| 迁安市|