亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于數(shù)據(jù)緩存技術(shù)讀取數(shù)據(jù)的方法

文檔序號:6367918閱讀:203來源:國知局
專利名稱:一種基于數(shù)據(jù)緩存技術(shù)讀取數(shù)據(jù)的方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)庫緩存技術(shù),尤其涉及一種基于數(shù)據(jù)緩存技術(shù)讀取數(shù)據(jù)的方法。
背景技術(shù)
在網(wǎng)絡(luò)中,WEB應(yīng)用程序采用內(nèi)存對象緩存系統(tǒng)作為數(shù)據(jù)庫(DB)的緩沖,將數(shù)據(jù)加載到內(nèi)存中,將較慢的數(shù)據(jù)庫(DB)訪問,變?yōu)檩^快的內(nèi)存訪問,以提高性能。網(wǎng)絡(luò)游戲上線后,經(jīng)常出現(xiàn)黃金時間玩家大量涌入服務(wù)器的情況,數(shù)據(jù)庫不堪重負,使玩家在登陸時長時間等待或者頻繁掉線,影響用戶體驗。以大型多人在線角色扮演游戲(Massive Multiplayer Online Role-Playing Game,MMORPG)為例進行說明,MMORPG 分為客戶端和服務(wù)器兩部分。玩家從客戶端通過互聯(lián)網(wǎng)連接,登陸服務(wù)器后才能進行游戲。玩家的資料保存在服務(wù)器端。玩家登陸游戲后,可以創(chuàng)造屬于自己的角色,擁有不同于別人的外形,屬性,擁有獨特的道具,這些內(nèi)容都依賴于屬于每個角色獨立的數(shù)據(jù),游戲依賴這些數(shù)據(jù)建立獨一無二的角色信息。為了數(shù)據(jù)安全,通常角色數(shù)據(jù)都保存在數(shù)據(jù)庫中,當(dāng)玩家登陸游戲時,系統(tǒng)從數(shù)據(jù)庫中取得數(shù)據(jù)為玩家建立角色。現(xiàn)有技術(shù)通常是不添加數(shù)據(jù)庫讀取緩沖,只有寫入緩沖,直接讀取數(shù)據(jù)庫中的數(shù)據(jù)。當(dāng)角色數(shù)據(jù)量不大,同時請求人數(shù)不多時,數(shù)據(jù)庫讀取數(shù)據(jù)能夠滿足玩家的要求。但隨著游戲的發(fā)展,玩家所擁有的特性數(shù)據(jù)越來越多,在線人數(shù)也逐漸增加,需要加載的數(shù)據(jù)就越來越龐大,當(dāng)無法滿足性能要求時,通常采用優(yōu)化表結(jié)構(gòu),升級硬件等方式進行應(yīng)對。公開號為CN 102081651A的“一種網(wǎng)絡(luò)游戲數(shù)據(jù)庫分表的方法”的中國專利申請公開的方法包括將網(wǎng)絡(luò)虛擬游戲數(shù)據(jù)庫設(shè)置為由取值范圍限定的虛擬圓,在所述虛擬圓上包括至少一個表,其中每個表中的虛擬節(jié)點在所述虛擬圓上均勻分布;計算待分表數(shù)據(jù)的隨機數(shù),在所述數(shù)值范圍內(nèi)根據(jù)所述隨機數(shù)據(jù)所述待分表數(shù)據(jù)插入虛擬節(jié)點中。該方法在表數(shù)量變化的情況下,減少需要重建的數(shù)據(jù)量,提高了讀取數(shù)據(jù)的效率。在數(shù)據(jù)庫數(shù)據(jù)量不斷加入的情況下,所述方法只是針對數(shù)據(jù)庫表的一種優(yōu)化措施。當(dāng)玩家大量涌入服務(wù)器時,數(shù)據(jù)庫的讀取效率還是不能滿足玩家的需求,使玩家在登陸時長時間等待。升級硬件方式雖然能夠明顯改善上述問題,但是高性能的硬件升級對客戶端帶來較大的資源浪費及經(jīng)濟負擔(dān)。因此,需要一種在盡量不升級硬件的情況下,既能夠保證服務(wù)器響應(yīng)客戶端的速度又能夠使在并發(fā)使用用戶增多的情況下性能不降低的措施,來保證數(shù)據(jù)庫數(shù)據(jù)的讀取效率
發(fā)明內(nèi)容

為了克服現(xiàn)有技術(shù)中的缺陷和不足,本發(fā)明提出一種將內(nèi)存對象緩存系統(tǒng)為數(shù)據(jù)庫(DB)緩沖應(yīng)用于網(wǎng)絡(luò)游戲中,通過對數(shù)據(jù)緩存算法(cache algorithms)進行設(shè)計,來提高數(shù)據(jù)庫讀取效率的方法。本發(fā)明公開一種基于數(shù)據(jù)緩存技術(shù)讀取數(shù)據(jù)的方法,包括如下步驟
SI :在服務(wù)器內(nèi)存中設(shè)置數(shù)據(jù)緩存區(qū),所述數(shù)據(jù)緩存區(qū)用于臨時存儲從數(shù)據(jù)庫中讀取的用戶特征數(shù)據(jù);所述用戶特征數(shù)據(jù)由用戶要求訪問的數(shù)據(jù)庫中的特性數(shù)據(jù)組成;S2:計算用戶活躍度,按照預(yù)設(shè)的活躍度閾值將用戶對應(yīng)的用戶特征數(shù)據(jù)分成不同的活躍等級,建立與每個活躍等級對應(yīng)的鏈表并對鏈表的表頭進行標(biāo)記,且低活躍等級的鏈表表頭指向相對高活躍等級鏈表的尾部;S3:根據(jù)當(dāng)前用戶請求訪問的用戶特征數(shù)據(jù),判斷在數(shù)據(jù)緩存區(qū)中是否存在所述用戶特征數(shù)據(jù),如存在,重新計算當(dāng)前用戶活躍度,從緩存區(qū)中讀取與當(dāng)前用戶對應(yīng)的用戶特征數(shù)據(jù),否則,從數(shù)據(jù)庫中讀取。
所述步驟S2中根據(jù)用戶的登錄頻率、切換服務(wù)器頻率和用戶特征等級計算得到用戶活躍度。所述用戶活躍度根據(jù)用戶特征數(shù)據(jù)被訪問的緩存命中率進行修改。所述步驟S3進一步包括,如重新計算當(dāng)前用戶活躍度后,當(dāng)前用戶對應(yīng)的用戶特征數(shù)據(jù)所屬的活躍等級沒有變化,則從所述用戶特征數(shù)據(jù)所屬的活躍等級鏈表中讀取用戶特征數(shù)據(jù),并將所述用戶特征數(shù)據(jù)從其所屬活躍等級鏈表中原來的位置刪除,插入到緊鄰其所屬活躍等級鏈表表頭的位置;如重新計算當(dāng)前用戶活躍度后,當(dāng)前用戶對應(yīng)的用戶特征數(shù)據(jù)所屬的活躍等級發(fā)生變化,則從找到所述用戶特征數(shù)據(jù)的活躍等級鏈表中讀取所述用戶特征數(shù)據(jù),并將所述用戶特征數(shù)據(jù)從被找到的活躍等級鏈表中原來的位置刪除,插入到緊鄰重新計算后的所述用戶特征數(shù)據(jù)所屬的新活躍等級鏈表表頭的位置。數(shù)據(jù)緩存區(qū)中還設(shè)置有保護等級鏈表,所述保護等級鏈表用于存儲從數(shù)據(jù)庫中初次被讀取的用戶特征數(shù)據(jù),當(dāng)保護等級鏈表中用戶特征數(shù)據(jù)被再次讀取時,被讀取的用戶特征數(shù)據(jù)脫離保護等級鏈表,插入到用戶特征數(shù)據(jù)所屬的活躍等級鏈表中。所述活躍度等級表長度固定,當(dāng)所述活躍等級鏈表長度未達到上限時,新讀入的用戶特征數(shù)據(jù)插入到緊鄰其對應(yīng)的活躍度等級鏈表表頭位置;當(dāng)所述活躍等級鏈表長度達到上限時,新讀入的用戶特征數(shù)據(jù)插入到緊鄰其對應(yīng)的活躍度等級表頭位置,處于整個隊列尾部的用戶特征數(shù)據(jù)被從緩存中刪除。所述保護等級鏈表長度固定,當(dāng)所述保護等級鏈表長度達到上限時,新讀入的用戶特征數(shù)據(jù)插入到緊鄰保護等級鏈表表頭的位置,處于保護等級鏈表尾部的用戶特征數(shù)據(jù)被移出保護等級鏈表,插入到其所屬的活躍等級鏈表的尾部。所述活躍度等級鏈表表長度固定,當(dāng)所述活躍等級鏈表長度達到上限時,從保護等級鏈表尾部移出的用戶特征數(shù)據(jù)替換掉處于整個鏈表隊列尾部的用戶特征數(shù)據(jù)。所述用戶特征數(shù)據(jù)為用戶在網(wǎng)絡(luò)游戲中扮演的角色的外形、屬性和擁有的道具特征對應(yīng)的數(shù)據(jù)。實施本發(fā)明的技術(shù)方案,采用內(nèi)存緩存機制,將緩存區(qū)用戶對應(yīng)的用戶特征數(shù)據(jù)按照活躍度閾值分成不同的活躍等級,建立與每個活躍等級對應(yīng)的鏈表并對鏈表的表頭進行標(biāo)記,且低活躍等級的鏈表表頭指向相對高活躍等級鏈表的尾部,使用戶訪問數(shù)據(jù)庫時實現(xiàn)點對點的從內(nèi)存中讀取數(shù)據(jù),降低從數(shù)據(jù)庫加載數(shù)據(jù)時的消耗,提高數(shù)據(jù)加載速度,降低數(shù)據(jù)庫負荷,提升用戶體驗;同時,利用空閑的內(nèi)存來降低輸入/輸出(10)端口負荷,均衡了服務(wù)器硬件資源的使用。


圖I為本發(fā)明實施例的基于數(shù)據(jù)緩存技術(shù)讀取數(shù)據(jù)的方法流程圖;圖2為本發(fā)明實施例的實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)緩存的示意圖;圖3為本發(fā)明實施例的步驟S3中讀取數(shù)據(jù)的具體流程圖;圖4為本發(fā)明具體實施例的按照活躍度閾值將用戶特征數(shù)據(jù)分成不同活躍等級的不意圖; 圖5為本發(fā)明具體實施例的訪問活躍等級鏈表中用戶特征數(shù)據(jù)等級不變情況下的算法不意圖;圖6為本發(fā)明具體實施例的訪問活躍等級鏈表中用戶特征數(shù)據(jù)等級變化情況下的算法不意圖;圖7為本發(fā)明實施例的訪問保護等級鏈表中用戶特征數(shù)據(jù)等級變化情況下的算法示意圖;圖8為本發(fā)明另一實施例的訪問保護等級鏈表中用戶特征數(shù)據(jù)等級變化情況下的算法不意圖;圖9為本發(fā)明實施例的訪問保護等級鏈表中用戶特征數(shù)據(jù)等級不變情況下的算法示意圖;圖10為本發(fā)明另一實施例的訪問保護等級鏈表中用戶特征數(shù)據(jù)等級不變情況下的算法示意圖。
具體實施例方式為詳細說明本發(fā)明的技術(shù)內(nèi)容、所實現(xiàn)目的及效果,以下結(jié)合實施方式并配合附圖予以詳細說明。圖I為本發(fā)明實施例的基于數(shù)據(jù)緩存技術(shù)讀取數(shù)據(jù)的方法流程圖。具體方法包括如下步驟SI :在服務(wù)器內(nèi)存中設(shè)置數(shù)據(jù)緩存區(qū),所述數(shù)據(jù)緩存區(qū)用于臨時存儲從數(shù)據(jù)庫中讀取的用戶特征數(shù)據(jù);所述用戶特征數(shù)據(jù)由用戶要求訪問的數(shù)據(jù)庫中的特性數(shù)據(jù)組成。在大型多人在線角色扮演游戲(MMORPG)中,玩家可以創(chuàng)造屬于自己的角色,擁有不同于別人的外形,屬性,擁有獨特的道具,所述內(nèi)容都依賴于屬于每個角色獨立的數(shù)據(jù),通常角色數(shù)據(jù)都保存在數(shù)據(jù)庫中,當(dāng)玩家登陸游戲時,系統(tǒng)根據(jù)玩家需要訪問的數(shù)據(jù)庫的數(shù)據(jù)內(nèi)容從數(shù)據(jù)庫中取得所需數(shù)據(jù)形成與角色對應(yīng)的用戶特征數(shù)據(jù),服務(wù)器記錄所述用戶特征數(shù)據(jù)對應(yīng)的玩家行為信息,如玩家登陸游戲的次數(shù)、切換服務(wù)器/場景頻率等信息。用戶特征數(shù)據(jù)的加載通常發(fā)生在登陸游戲,切換服務(wù)器/場景時,對于那些經(jīng)常登陸游戲,頻繁切換服務(wù)器的角色在數(shù)據(jù)緩存區(qū)中被訪問的較頻繁,角色數(shù)據(jù)被緩存的效率是最高的,而那些很少登陸游戲或者切換服務(wù)器的角色在數(shù)據(jù)緩存區(qū)中被很少訪問,所述角色數(shù)據(jù)被緩存的效率很低。本發(fā)明實施例的技術(shù)方案是將內(nèi)存緩存機制應(yīng)用于大型多人在線角色扮演游戲中,通過對緩存算法(cache algorithms)進行設(shè)計,提高緩存區(qū)的緩存效率。所述的內(nèi)存緩存機制是在服務(wù)器內(nèi)存中設(shè)置數(shù)據(jù)緩存區(qū),通過在內(nèi)存里維護一個統(tǒng)一的巨大的哈希(hash)表,將數(shù)據(jù)加載到內(nèi)存中,將較慢的數(shù)據(jù)庫(DB)訪問,變?yōu)檩^快的內(nèi)存訪問,提高性能。圖2為本發(fā)明實施例的實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)緩存的示意圖,所述數(shù)據(jù)緩存區(qū)包括讀取緩存和寫入緩存,所述讀取緩存用于臨時存儲從數(shù)據(jù)庫讀取到內(nèi)存的數(shù)據(jù),所述寫入緩存用于臨時存儲從內(nèi)存寫入到數(shù)據(jù)庫的數(shù)據(jù)。其中,對數(shù)據(jù)庫端的讀取,通常只在登陸游戲,切換服務(wù)器/場景時發(fā)生,次數(shù)相對較少,是可預(yù)測可控的,因此,讀取緩存采用一級緩存;而數(shù)據(jù)的修改頻率根據(jù)玩家行為不同存在很大差異,次數(shù)難以確定,因此,寫入緩存采用二級緩存,以提高頻繁修改數(shù)據(jù)時的效率,寫入的第一層緩存保證了對數(shù)據(jù)庫緩存的訪問頻率可控。S2:計算用戶活躍度,按照預(yù)設(shè)的活躍度閾值將用戶對應(yīng)的用戶特征數(shù)據(jù)分成不同的活躍等級,建立與每個活躍等級對應(yīng)的鏈表并對鏈表表頭進行標(biāo)記,且低活躍等級的鏈表表頭指向相對高活躍等級鏈表的尾部。在大型多人在線角色扮演游戲中,與玩家行為信息對應(yīng)的被訪問的用戶特征數(shù)據(jù)是有很強規(guī)律的。根據(jù)用戶的登錄頻率,切換服務(wù)器頻率及用戶特征等級綜合計算得出用戶活躍度。當(dāng)用戶登錄游戲的頻率越高,切換服務(wù)器/場景的頻率越高,用戶特征等級越高,則用戶的活躍度越高,與用戶對應(yīng)的用戶特征數(shù)據(jù)被訪問的頻率越高,按照預(yù)設(shè)的活躍度閾值將用戶對應(yīng)的用戶特征數(shù)據(jù)分成不同的活躍等級,同一活躍等級的用戶特征數(shù)據(jù)放 在隊列的一段,活躍等級越低,越靠近隊列的尾部,按照活躍等級的順序建立與每個活躍等級對應(yīng)的鏈表并對鏈表的表頭進行標(biāo)記,且低活躍等級的鏈表表頭的尾指針指向相對高活躍等級鏈表的尾部。用戶特征等級高的用戶切換服務(wù)器/場景的預(yù)期較等級較低的用戶高,再次上線的可能性也較高。根據(jù)用戶的行為信息統(tǒng)計數(shù)據(jù)緩存區(qū)中用戶特征數(shù)據(jù)被訪問時的命中率,在誤差允許的范圍內(nèi),按照統(tǒng)計的命中率不斷修改數(shù)據(jù)緩存區(qū)中用戶活躍度,調(diào)整用戶對應(yīng)的用戶特征數(shù)據(jù)所屬的活躍等級。對于緩存命中率按照下述方法進行統(tǒng)計修改按照預(yù)定的用戶活躍度閾值將用戶對應(yīng)的用戶特征數(shù)據(jù)分成不同的活躍等級,設(shè)用戶特征等級為1-60級的用戶特征數(shù)據(jù)屬于初級活躍等級,標(biāo)記為活躍等級I ;用戶特征等級為60-80級的用戶特征數(shù)據(jù)屬于中級活躍等級,標(biāo)記為活躍等級2 ;用戶特征等級為80-90級的用戶特征數(shù)據(jù)屬于高級活躍等級,標(biāo)記為活躍等級3。 設(shè)定每日登陸超過n次或切換服務(wù)器超過m次,用戶特征數(shù)據(jù)等級加I,但是不累力口,默認為n = 3,m = 5,由此可以得到用戶特征數(shù)據(jù)活躍等級最高為3+7(每周重置一次);其中,n和m能夠根據(jù)緩存命中率以及使用率進行調(diào)整。S3:根據(jù)當(dāng)前用戶請求訪問的用戶特征數(shù)據(jù),判斷在數(shù)據(jù)緩存區(qū)中是否存在所述用戶特征數(shù)據(jù),如存在,重新計算當(dāng)前用戶活躍的,從緩存區(qū)中讀取與當(dāng)前用戶對應(yīng)的用戶特征數(shù)據(jù),否則,從數(shù)據(jù)庫中讀取。圖3為本發(fā)明實施例的步驟S3中讀取數(shù)據(jù)的具體流程圖。流程如下根據(jù)用戶請求訪問的用戶特征數(shù)據(jù),判斷在數(shù)據(jù)緩存區(qū)中是否存在所述用戶特征數(shù)據(jù),如存在,重新計算當(dāng)前用戶活躍度,根據(jù)活躍度閾值判斷用戶對應(yīng)的用戶特征數(shù)據(jù)所屬的活躍等級是否發(fā)生變化。如重新計算當(dāng)前用戶活躍度后,當(dāng)前用戶對應(yīng)的用戶特征數(shù)據(jù)所屬的活躍等級沒有變化,則從所述用戶特征數(shù)據(jù)所屬的活躍等級鏈表中讀取用戶特征數(shù)據(jù),并將所述用戶特征數(shù)據(jù)從其所屬活躍等級鏈表中原來的位置刪除,插入到緊鄰其所屬活躍等級鏈表表頭的位置;如重新計算當(dāng)前用戶活躍度后,當(dāng)前用戶對應(yīng)的用戶特征數(shù)據(jù)所屬的活躍等級發(fā)生變化,則從找到所述用戶特征數(shù)據(jù)的活躍等級鏈表中讀取所述用戶特征數(shù)據(jù),并將所述用戶特征數(shù)據(jù)從被找到的活躍等級鏈表中原來的位置刪除,插入到緊鄰重新計算后的所述用戶特征數(shù)據(jù)所屬的新活躍等級鏈表表頭的位置。如在數(shù)據(jù)緩存區(qū)中不存在所述用戶特征數(shù)據(jù),則從數(shù)據(jù)庫中讀取所述用戶特征數(shù)據(jù)塊。圖4為本發(fā)明具體實施例的按照活躍度閾值將用戶對應(yīng)的用戶特征數(shù)據(jù)分成不同活躍等級的示意圖。如圖4所示,數(shù)據(jù)緩存區(qū)中存有7個從數(shù)據(jù)庫中讀取的用戶特征數(shù)據(jù),計算與7個用戶特征數(shù)據(jù)對應(yīng)的用戶的活躍度,按照預(yù)設(shè)的活躍度閾值將用戶對應(yīng)的用戶特征數(shù)據(jù)分成不同的活躍等級,用戶特征數(shù)據(jù)PU P2、P3屬于活躍等級1,P4、P5、P6屬于活躍等級2,P7屬于最高活躍等級,按照用戶特征數(shù)據(jù)的活躍等級順序建立與所述活躍等級對應(yīng)的鏈表并對鏈表表頭進行標(biāo)記,且低活躍等級的鏈表表頭的尾指針指向相對高活躍等級的鏈表結(jié)構(gòu)的尾部。Alhead表示與活躍等級I對應(yīng)的鏈表的表頭,A2head表示 與活躍等級2對應(yīng)的鏈表的表頭,head表示與最高活躍等級對應(yīng)的鏈表的表頭,所述低活躍等級的鏈表表頭Alhead的尾指針指向活躍等級表頭為A2head的鏈表的尾部,活躍等級A2head的尾指針指向最聞活躍等級表頭為head的鏈表的尾部。按照步驟S3的算法,數(shù)據(jù)緩存區(qū)中存在當(dāng)前用戶要求訪問的用戶特征數(shù)據(jù),重新計算當(dāng)前用戶活躍度,根據(jù)活躍度閾值判斷用戶對應(yīng)的用戶特征數(shù)據(jù)所屬的活躍等級是否發(fā)生變化。如重新計算當(dāng)前用戶活躍度后,當(dāng)前用戶對應(yīng)的用戶特征數(shù)據(jù)所屬的活躍等級沒有變化,則從所述用戶特征數(shù)據(jù)所屬的活躍等級鏈表中讀取用戶特征數(shù)據(jù),并將所述用戶特征數(shù)據(jù)從其所屬活躍等級鏈表中原來的位置刪除,插入到緊鄰其所屬活躍等級鏈表表頭的位置。參見圖5為本發(fā)明具體實施例的訪問活躍等級鏈表中用戶特征數(shù)據(jù)等級不變情況下的算法示意圖。如用戶請求訪問的用戶特征數(shù)據(jù)為P1,數(shù)據(jù)緩存區(qū)中存在用戶特征數(shù)據(jù)P1,計算用戶活躍度,得到用戶對應(yīng)的用戶特征數(shù)據(jù)Pl所屬的活躍等級沒有變化,在數(shù)據(jù)緩存區(qū)中找到表頭為Alhead的鏈表與所述用戶特征數(shù)據(jù)Pl所屬的活躍等級相同,CPU從表頭為Alhead的鏈表結(jié)構(gòu)中讀取P1,并且將Pl從鏈表中原來的位置刪除,插入到緊鄰表頭為Alhead的鏈表表頭的位置,用戶特征數(shù)據(jù)Pl的尾指針指向表頭Alhead,用戶特征數(shù)據(jù)P3、P2依次向鏈表隊列尾部移一位,此種情況下,影響當(dāng)前活躍等級鏈表中用戶特征數(shù)據(jù)的順序。如重新計算當(dāng)前用戶活躍度后,當(dāng)前用戶對應(yīng)的用戶特征數(shù)據(jù)所屬的活躍等級發(fā)生變化,則從找到所述用戶特征數(shù)據(jù)的活躍等級鏈表中讀取所述用戶特征數(shù)據(jù),并將所述用戶特征數(shù)據(jù)從被找到的活躍等級鏈表中原來的位置刪除,插入到緊鄰重新計算后的所述用戶特征數(shù)據(jù)所屬的新活躍等級鏈表表頭的位置。圖6為本發(fā)明具體實施例的訪問活躍等級鏈表中用戶特征數(shù)據(jù)等級變化情況下的算法示意圖。如圖6所示,如用戶請求訪問的用戶特征數(shù)據(jù)為P1,數(shù)據(jù)緩存區(qū)中存在用戶特征數(shù)據(jù)P1,計算用戶活躍度,得到用戶對應(yīng)的用戶特征數(shù)據(jù)Pl所屬的活躍等級發(fā)生變化,在數(shù)據(jù)緩存區(qū)中找到表頭為A2head的鏈表與所述用戶特征數(shù)據(jù)Pl所屬的活躍等級相同,但用戶特征數(shù)據(jù)Pl不在表頭為A2head的活躍等級鏈表中,而在低活躍等級表頭為Alhead的鏈表中,CPU從表頭為Alhead的鏈表中讀取Pl,并且將Pl從表頭為Alhead的鏈表中刪除,插入到表頭為A2head的緊鄰鏈表表頭的位置,用戶特征數(shù)據(jù)Pl的尾指針指向表頭A2head,用戶特征數(shù)據(jù)P6、P5、P4、P3、P2依次向鏈表隊列尾部移一位。數(shù)據(jù)緩存區(qū)的大小能夠根據(jù)讀取數(shù)據(jù)的情況進行設(shè)置,第一次登陸的用戶活躍度最低,與用戶對應(yīng)的用戶特征數(shù)據(jù)屬于低活躍等級,處于活躍等級鏈表隊列的尾部,按照上述算法,當(dāng)數(shù)據(jù)庫緩存區(qū)達到存取數(shù)據(jù)上限時,位于活躍等級鏈表隊列尾部的第一次被訪問的用戶特征數(shù)據(jù)會被不停刪除,使第一次被訪問用戶特征數(shù)據(jù)的用戶沒有積累活躍度的機會。因此,在數(shù)據(jù)緩存區(qū)中還設(shè)置有保護等級鏈表,所述保護等級鏈表用于存儲從數(shù)據(jù)庫中初次讀取的用戶特征數(shù)據(jù)(在數(shù)據(jù)緩存區(qū)中不存在被訪問的用戶特征數(shù)據(jù),需要從數(shù)據(jù)庫中去讀的情況下,被讀取的用戶特征數(shù)據(jù)均被認為是初次讀取),當(dāng)用戶特征數(shù)據(jù)的活躍等級提高時,用戶特征數(shù)據(jù)離開保護等級鏈表,本實施例中設(shè)置為用戶特征數(shù)據(jù)被再次讀取時,即可離開保護等級鏈表。也就是說當(dāng)用戶請求訪問保護等級鏈表中的用戶特征數(shù)據(jù)時(即保護等級鏈表中存儲的用戶特征數(shù)據(jù)被再次讀取),被訪問的用戶特征數(shù)據(jù)脫離保護等級鏈表,插入到用戶特征數(shù)據(jù)所屬的活躍等級鏈表中。所述活躍度等級表長度固定,當(dāng)所述活躍等級鏈表長度未達到上限時,新讀入的用戶特征數(shù)據(jù)插入到緊鄰其對應(yīng)的活躍度等級鏈表表頭位置;當(dāng)所述活躍等級鏈表長度達到上限時,新讀入的用戶特征數(shù)據(jù)插入到緊鄰其對應(yīng)的活躍度等級表頭位置,處于整個隊列尾部的用戶特征數(shù)據(jù)被從緩存中刪除。保護等級鏈表具有最高優(yōu)先權(quán),鏈表中用戶特征數(shù)據(jù)最后被替換。保護等級鏈表長度固定,當(dāng)所述保護等級鏈表長度達到上限時,新讀入的用戶特征數(shù)據(jù)插入到緊鄰保護等級鏈表表頭的位置,處于保護等級鏈表尾部的用戶特征數(shù)據(jù)被移出保護等級鏈表,插入到其所屬的活躍等級鏈表中的尾部。當(dāng)所述活躍等級鏈表長度達到上限時,從保護等級鏈表尾部移出的用戶特征數(shù)據(jù)替換掉處于整個鏈表隊列尾部的用戶特征數(shù)據(jù)。當(dāng)用戶申請訪問的用戶特征數(shù)據(jù)為存在于保護等級鏈表中的用戶特征數(shù)據(jù)時,計算用戶活躍度,判斷保護等級鏈表中用戶特征數(shù)據(jù)所屬的活躍等級是否發(fā)生變化。本實施例設(shè)置當(dāng)保護等級鏈表中數(shù)據(jù)被再次讀取時即可脫離保護等級鏈表,該用戶特征數(shù)據(jù)從保護等級鏈表中被刪除,插入到緊鄰其所屬活躍等級鏈表表頭的位置,用戶特征數(shù)據(jù)的尾指 針指向其所屬活躍等級的鏈表的表頭。圖7為本發(fā)明實施例的訪問保護等級鏈表中用戶特征數(shù)據(jù)等級變化情況下的算法示意圖。參見圖7,用戶特征數(shù)據(jù)Pl'、P2'、P3'、P4'和P5'為初次從數(shù)據(jù)庫中讀取的用戶特征數(shù)據(jù),存儲于表頭為head'的保護等級鏈表中;用戶特征數(shù)據(jù)P1、P2、P3、P4、P5、P6、P7為按照活躍度閾值將用戶對應(yīng)的用戶特征數(shù)據(jù)分成不同的活躍等級后建立的鏈表并對鏈表表頭進行標(biāo)記,其中,用戶特征數(shù)據(jù)P1、P2、P3屬于低活躍等級表頭為Alhead鏈表,用戶特征數(shù)據(jù)P4、P5、P6屬于中活躍等級表頭為A2head鏈表,用戶特征數(shù)據(jù)P7為活躍等級鏈表表頭為head的鏈表,低活躍等級的鏈表表頭Alhead的尾指針指向活躍等級表頭為A2head的鏈表的尾部,活躍等級A2head的尾指針指向最聞活躍等級表頭為head的鏈表的尾部。如用戶請求訪問的用戶特征數(shù)據(jù)為P5',且P5'存在于數(shù)據(jù)緩存區(qū)的保護等級鏈表中,CPU讀取P5',此時P5'為第二次被讀取,將P5'從保護等級鏈表中刪除(P5'脫離保護等級鏈表),插入到緊鄰表頭為Alhead鏈表表頭的位置,P5'的尾指針指向鏈表表頭Alhead,用戶特征數(shù)據(jù)P1、P2、P3依次向鏈表隊列尾部移一位。圖8為本發(fā)明另一實施例的訪問保護等級鏈表中用戶特征數(shù)據(jù)等級變化情況下的算法示意圖。當(dāng)所述鏈表隊列長度達到上限的情況下,將P5'從保護等級鏈表中刪除(P5'脫離保護等級鏈表),插入到緊鄰表頭為Alhead鏈表表頭的位置,P5/的尾指針指向鏈表表頭Alhead,處于鏈表隊列尾部的Pl從活躍等級鏈表中被刪除。當(dāng)用戶申請訪問用戶特征數(shù)據(jù)不在數(shù)據(jù)緩存區(qū)中時,CPU從原始數(shù)據(jù)庫中讀取用戶特征數(shù)據(jù),將所述用戶特征數(shù)據(jù)存儲到保護等級鏈表中。如保護等級鏈表長度未達到上限,所述用戶特征數(shù)據(jù)保存到保護等級鏈表中且將該用戶特征數(shù)據(jù)插入到緊鄰保護等級鏈表表頭的位置,用戶特征數(shù)據(jù)的尾指針指向保護等級鏈表的表頭;如保護等級鏈表長度達到上限,所述用戶特征數(shù)據(jù)插入到緊鄰保護等級鏈表表頭的位置,用戶特征數(shù)據(jù)的尾指針指向保護等級鏈表的表頭,處于保護等級鏈表隊列尾部的用戶特征數(shù)據(jù)被移出保護等級鏈表,插入到其所屬活躍等級的鏈表隊列的尾部。當(dāng)所述活躍等級鏈表長度達到上限時,從保護等級鏈表尾部移出的用戶特征數(shù)據(jù)替換掉處于整個鏈表隊列 尾部的用戶特征數(shù)據(jù)。圖9為本發(fā)明實施例的訪問保護等級鏈表中用戶特征數(shù)據(jù)等級不變情況下的算法示意圖。參見圖9,用戶特征數(shù)據(jù)Pl'、P2'、P3'、P4'和P5'為初次從數(shù)據(jù)庫中讀取的用戶特征數(shù)據(jù),存儲于表頭為head'的保護等級鏈表中;用戶特征數(shù)據(jù)P1、P2、P3、P4、P5、P6、P7為按照活躍度閾值將用戶對應(yīng)的用戶特征數(shù)據(jù)分成不同的活躍等級后建立的鏈表并對鏈表表頭進行標(biāo)記,其中,用戶特征數(shù)據(jù)P1、P2、P3屬于低活躍等級表頭為Alhead鏈表,用戶特征數(shù)據(jù)P4、P5、P6屬于中活躍等級表頭為A2head鏈表,用戶特征數(shù)據(jù)P7為活躍等級鏈表表頭為head的鏈表,低活躍等級的鏈表表頭Alhead的尾指針指向活躍等級表頭為A2head的鏈表的尾部,活躍等級A2head的尾指針指向最高活躍等級表頭為head的鏈表的尾部。如用戶請求訪問的用戶特征數(shù)據(jù)為P6',但P6'不存在于數(shù)據(jù)緩存區(qū)的保護等級鏈表中,P6'為初次被讀取的用戶特征數(shù)據(jù),CPU從原始數(shù)據(jù)庫中讀取用戶特征數(shù)據(jù)P6',將P6'插入到保護等級鏈表緊鄰鏈表表頭Head'的位置,P6'的尾指針指向保護等級鏈表表頭Head',如保護等級鏈表長度未達到上限,P6'插入到保護等級鏈表緊鄰鏈表表頭Head'的位置后,用戶特征數(shù)據(jù)Pl'、P2'、P3'、P4'和P5'依次向隊列尾部移一位。如保護等級鏈表長度達到上限,P6'插入到保護等級鏈表緊鄰鏈表表頭Head'的位置后,保護等級鏈表中用戶對應(yīng)的用戶特征數(shù)據(jù)Pl'的活躍度最低,Pl'被移出保護等級鏈表,所述被移出保護等級鏈表的Pl'插入到活躍等級鏈表隊列的的尾部。圖10為本發(fā)明另一實施例的訪問保護等級鏈表中用戶特征數(shù)據(jù)等級不變情況下的算法示意圖。當(dāng)活躍等級鏈表長度達到上限,則Pl'從保護等級鏈表尾部移出,替換掉活躍等級鏈表尾部活躍度最低的用戶對應(yīng)的用戶特征數(shù)據(jù)Pl,Pl從緩存區(qū)中被刪除。本發(fā)明的實施方式使數(shù)據(jù)被訪問時無需遍歷緩存區(qū)整個數(shù)據(jù)鏈表以尋找自己新的位置,只需記錄少量的活躍等級對應(yīng)的鏈表表頭的位置進行定位,大大節(jié)約了時間開銷,提高數(shù)據(jù)加載速度,降低數(shù)據(jù)庫負荷;在玩家切換服務(wù)器/場景時,緩存100%命中(將緩存容量設(shè)置為服務(wù)器最高在線,就可保證在線玩家均被緩存)效率提升明顯,誤差也控制在可接受的范圍內(nèi),提升用戶體驗;同時,負責(zé)讀取數(shù)據(jù)的服務(wù)器負荷主要集中在CPU和輸入/輸出(IO)端口方面,有效的利用了空閑的內(nèi)存來降低輸入/輸出(IO)端口負荷,均衡了服務(wù)器硬件資源的使用。上述僅為本發(fā)明的較佳實施例及所運用技術(shù)原理,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍內(nèi)。
權(quán)利要求
1.一種基于數(shù)據(jù)緩存技術(shù)讀取數(shù)據(jù)的方法,包括如下步驟 Si:在服務(wù)器內(nèi)存中設(shè)置數(shù)據(jù)緩存區(qū),所述數(shù)據(jù)緩存區(qū)用于臨時存儲從數(shù)據(jù)庫中讀取的用戶特征數(shù)據(jù);所述用戶特征數(shù)據(jù)由用戶要求訪問的數(shù)據(jù)庫中的特性數(shù)據(jù)組成; S2 :計算用戶活躍度,按照預(yù)設(shè)的活躍度閾值將用戶對應(yīng)的用戶特征數(shù)據(jù)分成不同的活躍等級,建立與每個活躍等級對應(yīng)的鏈表并對鏈表的表頭進行標(biāo)記,且低活躍等級的鏈表表頭指向相對聞活躍等級鏈表的尾部; S3:根據(jù)當(dāng)前用戶請求訪問的用戶特征數(shù)據(jù),判斷在數(shù)據(jù)緩存區(qū)中是否存在所述用戶特征數(shù)據(jù),如存在,重新計算當(dāng)前用戶活躍度,從緩存區(qū)中讀取與當(dāng)前用戶對應(yīng)的用戶特征數(shù)據(jù),否則,從數(shù)據(jù)庫中讀取。
2.根據(jù)權(quán)利要求I所述的基于數(shù)據(jù)緩存技術(shù)讀取數(shù)據(jù)的方法,其特征在于,所述步驟S2中根據(jù)用戶的登錄頻率、切換服務(wù)器頻率和用戶特征等級計算得到用戶活躍度。
3.根據(jù)權(quán)利要求2所述的基于數(shù)據(jù)緩存技術(shù)讀取數(shù)據(jù)的方法,其特征在干,所述用戶活躍度根據(jù)用戶特征數(shù)據(jù)被訪問的緩存命中率進行修改。
4.根據(jù)權(quán)利要求I所述的基于數(shù)據(jù)緩存技術(shù)讀取數(shù)據(jù)的方法,其特征在于,所述步驟S3進ー步包括,如重新計算當(dāng)前用戶活躍度后,當(dāng)前用戶對應(yīng)的用戶特征數(shù)據(jù)所屬的活躍等級沒有變化,則從所述用戶特征數(shù)據(jù)所屬的活躍等級鏈表中讀取用戶特征數(shù)據(jù),并將所述用戶特征數(shù)據(jù)從其所屬活躍等級鏈表中原來的位置刪除,插入到緊鄰其所屬活躍等級鏈表表頭的位置;如重新計算當(dāng)前用戶活躍度后,當(dāng)前用戶對應(yīng)的用戶特征數(shù)據(jù)所屬的活躍等級發(fā)生變化,則從找到所述用戶特征數(shù)據(jù)的活躍等級鏈表中讀取所述用戶特征數(shù)據(jù),并將所述用戶特征數(shù)據(jù)從被找到的活躍等級鏈表中原來的位置刪除,插入到緊鄰重新計算后的所述用戶特征數(shù)據(jù)所屬的新活躍等級鏈表表頭的位置。
5.根據(jù)權(quán)利要求I所述的基于數(shù)據(jù)緩存技術(shù)讀取數(shù)據(jù)的方法,其特征在于,數(shù)據(jù)緩存區(qū)中還設(shè)置有保護等級鏈表,所述保護等級鏈表用于存儲從數(shù)據(jù)庫中初次被讀取的用戶特征數(shù)據(jù),當(dāng)保護等級鏈表中用戶特征數(shù)據(jù)被再次讀取時,被讀取的用戶特征數(shù)據(jù)脫離保護等級鏈表,插入到用戶特征數(shù)據(jù)所屬的活躍等級鏈表中。
6.根據(jù)權(quán)利要求5所述的基于數(shù)據(jù)緩存技術(shù)讀取數(shù)據(jù)的方法,其特征在于,所述活躍度等級表長度固定,當(dāng)所述活躍等級鏈表長度未達到上限時,新讀入的用戶特征數(shù)據(jù)插入到緊鄰其對應(yīng)的活躍度等級鏈表表頭位置;當(dāng)所述活躍等級鏈表長度達到上限時,新讀入的用戶特征數(shù)據(jù)插入到緊鄰其對應(yīng)的活躍度等級表頭位置,處于整個隊列尾部的用戶特征數(shù)據(jù)被從緩存中刪除。
7.根據(jù)權(quán)利要求5所述的基于數(shù)據(jù)緩存技術(shù)讀取數(shù)據(jù)的方法,其特征在于,所述保護等級鏈表長度固定,當(dāng)所述保護等級鏈表長度達到上限吋,新讀入的用戶特征數(shù)據(jù)插入到緊鄰保護等級鏈表表頭的位置,處于保護等級鏈表尾部的用戶特征數(shù)據(jù)被移出保護等級鏈表,插入到其所屬的活躍等級鏈表的尾部。
8.根據(jù)權(quán)利要求7所述的基于數(shù)據(jù)緩存技術(shù)讀取數(shù)據(jù)的方法,其特征在干,所述活躍度等級鏈表表長度固定,當(dāng)所述活躍等級鏈表長度達到上限吋,從保護等級鏈表尾部移出的用戶特征數(shù)據(jù)替換處于整個鏈表隊列尾部的用戶特征數(shù)據(jù)。
9.根據(jù)權(quán)利要求I所述的基于數(shù)據(jù)緩存技術(shù)讀取數(shù)據(jù)的方法,其特征在于,所述用戶特征數(shù)據(jù)為用戶在網(wǎng)絡(luò)游戲中扮演的角色的外形、屬性和擁有的道具特征對應(yīng)的數(shù)據(jù)。
全文摘要
本發(fā)明公開一種基于數(shù)據(jù)緩存技術(shù)讀取數(shù)據(jù)的方法,該方法采用內(nèi)存緩存機制,將緩存區(qū)的用戶對應(yīng)的用戶特征數(shù)據(jù)按照活躍度閾值分成不同的活躍等級,建立與每個活躍等級對應(yīng)的鏈表并對鏈表的表頭進行標(biāo)記,且低活躍等級的鏈表表頭指向相對高活躍等級鏈表的尾部,使多用戶讀取數(shù)據(jù)時通過標(biāo)記表頭的鏈表表頭查找所要訪問的用戶特征數(shù)據(jù),實現(xiàn)點對點的從內(nèi)存中讀取數(shù)據(jù),降低從數(shù)據(jù)庫加載數(shù)據(jù)時的消耗,提高數(shù)據(jù)加載速度,降低數(shù)據(jù)庫負荷,提升用戶體驗;同時,利用空閑的內(nèi)存降低輸入/輸出(IO)端口負荷,均衡了服務(wù)器硬件資源的使用。
文檔編號G06F17/30GK102663096SQ201210105548
公開日2012年9月12日 申請日期2012年4月11日 優(yōu)先權(quán)日2012年4月11日
發(fā)明者張昊陽 申請人:北京像素軟件科技股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1