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

具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置及其實現(xiàn)方法

文檔序號:6573284閱讀:260來源:國知局
專利名稱:具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置及其實現(xiàn)方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置及其實現(xiàn)方 法,特別是涉及一種在應(yīng)用系統(tǒng)運行過程中根據(jù)內(nèi)存數(shù)據(jù)庫的使用情況對內(nèi)存 數(shù)據(jù)庫容量進(jìn)行動態(tài)調(diào)整以達(dá)到內(nèi)存數(shù)據(jù)庫持續(xù)可用的實現(xiàn)方法及其裝置。
背景技術(shù)
隨著豐富多彩的各種移動增殖業(yè)務(wù)(如點對點短信業(yè)務(wù)、多媒體彩信業(yè)務(wù) 等)的開展及普及,業(yè)務(wù)量每年都在快速增長,為了提高系統(tǒng)的數(shù)據(jù)處理能力, 系統(tǒng)一般都采用內(nèi)存數(shù)據(jù)庫。因為內(nèi)存數(shù)據(jù)庫與物理數(shù)據(jù)庫相比,有著無法比 擬的處理速度,所以內(nèi)存數(shù)據(jù)庫正被越來越多的業(yè)務(wù)系統(tǒng)所采用。在目前的內(nèi)存數(shù)據(jù)庫系統(tǒng)中, 一般都是采用一個哈希(Hash)沖突隊列來 保存記錄, 一條記錄在內(nèi)存數(shù)據(jù)庫中的生存周期是由業(yè)務(wù)層來決定的,而不是 內(nèi)存數(shù)據(jù)庫主動控制,對內(nèi)存數(shù)據(jù)庫中的記錄的清理都是采用 一個獨立線程掃 描死記錄(即生命周期超長的記錄)的方式進(jìn)行,而對內(nèi)存數(shù)據(jù)庫容量缺少一 種實時的監(jiān)控與管理,很容易造成內(nèi)存數(shù)據(jù)庫的溢出(即使用率達(dá)100%), 使內(nèi)存表無效。同時,又因為記錄在內(nèi)存數(shù)據(jù)庫的生存周期是由業(yè)務(wù)層決定,所以就會存 在一旦業(yè)務(wù)層控制不好,一條記錄就會反復(fù)在內(nèi)存數(shù)據(jù)庫與物理數(shù)據(jù)庫之間反 復(fù)操作,這就增加不必要的物理1/0 (I叩ut/Output,輸入/輸出)操作,嚴(yán)重制 約著整個系統(tǒng)的處理性能。發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題在于提供一種具有容量動態(tài)控制功能的內(nèi)存 數(shù)據(jù)存儲裝置及其實現(xiàn)方法,用于通過最大可能地利用內(nèi)存數(shù)據(jù)庫操作速度高 于物理庫的特點,來提高系統(tǒng)的數(shù)據(jù)處理性能,并保證內(nèi)存數(shù)據(jù)庫的穩(wěn)定可用 性與健壯性。為了實現(xiàn)上述目的,本發(fā)明提供了一種具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù) 存儲裝置,其特征在于,包括數(shù)據(jù)存儲模塊、容量監(jiān)控模塊;所述數(shù)據(jù)存儲模塊又包括CQ記錄模塊、DQ記錄模塊、FQ記錄模塊、記錄數(shù)據(jù)模塊及節(jié) 點信息模塊;所述CQ記錄模塊,用于通過各CQ隊列的記錄鏈分別存放伺 一哈希值的 記錄,并連接到哈希索引數(shù)據(jù)區(qū)鏈表上,且所述各記錄鏈的鏈頭連接在哈希入 口鏈表上;所述DQ記錄模塊,用于通過臟記錄鏈存放臟記錄,并將接入所述臟記錄 鏈的記錄連接到所述哈希索引數(shù)據(jù)區(qū)鏈表上;所述接入所述臟記錄鏈的記錄屬 于DQ隊列節(jié)點,未接入所述臟記錄鏈的記錄屬于當(dāng)前記錄隊列節(jié)點,所述臟 記錄鏈中的臟記錄按使用先后插入;所述各CQ隊列的記錄鏈與所述臟記錄鏈相交的節(jié)點為臟記錄、當(dāng)前沖突 隊列記錄和空閑隊列記錄;所述FQ記錄模塊用于存放所述空閑隊列記錄;所述記錄數(shù)據(jù)模塊,連接所述CQ記錄模塊、所述DQ記錄模塊、所述 FQ記錄模塊,用于通過記錄數(shù)據(jù)區(qū)鏈表保存所述臟記錄、所述當(dāng)前沖突隊列 記錄及所述空閑隊列記錄對應(yīng)的記錄數(shù)據(jù);所述節(jié)點信息模塊,連接所述CQ記錄模塊、所述DQ記錄模塊、所述 FQ記錄模塊、所述記錄數(shù)據(jù)模塊,用于存放所述哈希入口鏈表的表頭信息、 所述DQ隊列的首尾指針信息、所述FQ的首尾指針信息及所述記錄數(shù)據(jù)區(qū)鏈 表的首地址信息-,所述容量監(jiān)控模塊通過不同的操作接口對所述數(shù)據(jù)存儲模塊進(jìn)行相應(yīng)的 動態(tài)監(jiān)控與調(diào)整。所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置,其中,所述操作接口 包括初始化接口、增加記錄接口、査詢記錄接口、修改記錄接口、刪除記錄接 口、遷移記錄接口、動態(tài)控制接口和/或批量清理接口。為了實現(xiàn)上述目的,本發(fā)明還提供了一種具有容量動態(tài)控制功能的內(nèi)存數(shù) 據(jù)存儲裝置的實現(xiàn)方法,其特征在于,包括步驟一,設(shè)置包含縱向鏈和橫向鏈的二維表表示內(nèi)存表,所述縱向鏈為各 CQ隊列的記錄鏈, 一條所述記錄鏈存放同一哈希值的記錄,并連接到哈希索引數(shù)據(jù)區(qū)鏈表上,所述記錄鏈的鏈頭連接在哈希入口鏈表上,所述哈希入口鏈 表的表頭登記在所述內(nèi)存表的表節(jié)點中;所述橫向鏈為臟記錄鏈,接入所述臟記錄鏈的記錄屬于DQ隊列節(jié)點,并 連接到所述哈希索引數(shù)據(jù)區(qū)鏈表上,未接入所述臟記錄鏈的記錄屬于當(dāng)前記錄 隊列節(jié)點,所述臟記錄鏈中的記錄按使用先后插入,所述DQ隊列的首尾指針 登記在所述內(nèi)存表的表節(jié)點中;所述縱向鏈、橫向鏈相交的節(jié)點是所述內(nèi)存表的所有記錄,包括臟記錄、 當(dāng)前沖突隊列記錄和空閑隊列記錄,所述空閑隊列記錄存放在所述FQ隊列, 且所述FQ隊列的首尾指針登記在所述內(nèi)存表的表節(jié)點中;所述臟記錄、所述 當(dāng)前沖突隊列記錄和所述空閑隊列記錄對應(yīng)的記錄數(shù)據(jù)保存在記錄數(shù)據(jù)區(qū)鏈 表中,該記錄數(shù)據(jù)區(qū)鏈表的首地址登記在所述內(nèi)存表的表節(jié)點中;及步驟二,通過相應(yīng)的操作接口對所述內(nèi)存表的容量進(jìn)行相應(yīng)的動態(tài)監(jiān)控與 調(diào)整。所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置的實現(xiàn)方法,其中,所 述內(nèi)存表的表節(jié)點的結(jié)構(gòu)具體包括表名、表總?cè)萘?、哈希模值、每條記錄的大小、哈希入口鏈表的入口指針、哈希索引數(shù)據(jù)區(qū)鏈表的指針、記錄數(shù)據(jù)區(qū)的指針、FQ隊列的隊首和隊尾、DQ隊列的隊首和隊尾、DQ隊列的記錄數(shù)、CQ 隊列的記錄數(shù);其中,所述哈希索引數(shù)據(jù)區(qū)鏈表的指針又包括CQ隊列的下 指針、DQ隊列的前向指針、DQ隊列的后向指針。所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置的實現(xiàn)方法,其中,所 述步驟二中,還包括通過初始化接口對所述內(nèi)存表進(jìn)行初始化的步驟,具體 為根據(jù)所述內(nèi)存表的參數(shù)申請內(nèi)存,并對相應(yīng)的成員進(jìn)行初始化,初始化后所述二維表中的所有節(jié)點都屬于所述FQ隊列節(jié)點。所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置的實現(xiàn)方法,其中,所述步驟二中,還包括通過增加記錄接口在所述內(nèi)存表中增加記錄的步驟,具 體為監(jiān)測所述內(nèi)存表當(dāng)前的使用率并根據(jù)該使用率判斷所述內(nèi)存表當(dāng)前是否 達(dá)到使用上限;若未達(dá)到使用上限,則直接將該記錄插入到內(nèi)存數(shù)據(jù)庫,并掛 在所述縱向鏈中;若已達(dá)到使用上限,則啟動清理線程,對所述DQ隊列中的 記錄進(jìn)行清理,釋放空間。所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置的實現(xiàn)方法,其中,所述步驟二中,還包括通過査詢記錄接口在所述內(nèi)存表中査詢記錄的步驟,具 體為根據(jù)該記錄的主鍵生成的哈希索引值找到相應(yīng)的CQ隊列的入口,讀取 相應(yīng)的記錄值。所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置的實現(xiàn)方法,其中,所 述步驟二中,還包括通過修改記錄接口在所述內(nèi)存表中修改記錄的步驟,具 體為根據(jù)該記錄的主鍵生成的哈希索引值找到相應(yīng)的CQ隊列的入口,讀取 相應(yīng)的記錄值,并用該記錄值更新舊值,若該記錄在所述DQ隊列中,則將該 記錄移到所述CQ隊列。所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置的實現(xiàn)方法,其中,所 述步驟二中,還包括通過刪除記錄接口在所述內(nèi)存表中刪除記錄的步驟,具 體為根據(jù)該記錄的主鍵生成的哈希索引值找到相應(yīng)的CQ隊列的入口,讀取 相應(yīng)的記錄值;發(fā)送消息給物理數(shù)據(jù)庫同步線程,由該物理數(shù)據(jù)庫同步線程將該消息同步入物理數(shù)據(jù)庫,再將該消息從內(nèi)存中刪除。所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置的實現(xiàn)方法,其中,所述步驟二中,還包括通過遷移記錄接口在所述內(nèi)存表中遷移記錄的步驟,具 體為根據(jù)該記錄的主鍵生成的哈希索引值找到相應(yīng)的CQ隊列的入口,讀取相應(yīng)的記錄值;若該記錄已在所述DQ隊列中,則不處理,若該記錄不在所述 DQ隊列中,則將該記錄從所述CQ隊列遷移到所述DQ隊列。所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置的實現(xiàn)方法,其中,所 述步驟二中,還包括通過動態(tài)控制接口對所述內(nèi)存表中的記錄進(jìn)行動態(tài)控制 的步驟,具體為當(dāng)有記錄插入時,實時統(tǒng)計出所述內(nèi)存表當(dāng)前的使用率;并 根據(jù)該使用率判斷所述內(nèi)存表當(dāng)前是否達(dá)到已用上限或可用下限,若達(dá)到已用 上限時,啟動清理線程進(jìn)行數(shù)據(jù)清理,釋放空間;若達(dá)到可用下限時,停止清 理。所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置的實現(xiàn)方法,其中,所 述步驟二中,還包括通過批量清理接口對所述內(nèi)存表中的記錄進(jìn)行批量清理 的步驟,具體為從所述DQ隊列首開始, 一次批量讀取多條記錄;發(fā)送消息 給物理數(shù)據(jù)庫同步線程,由所述物理數(shù)據(jù)庫同步線程將該消息同步入所述物理 數(shù)據(jù)庫,再將記錄從所述內(nèi)存表中刪除。所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置的實現(xiàn)方法,其中,所述使用率為所述CQ隊列的記錄總數(shù)與所述DQ隊列的記錄總數(shù)之和與所述內(nèi) 存表的總記錄數(shù)的比值。本發(fā)明的有益技術(shù)效果與現(xiàn)有技術(shù)的內(nèi)存數(shù)據(jù)庫相比,采用本發(fā)明可以盡可能充分利用系統(tǒng)的物 理內(nèi)存來保存業(yè)務(wù)有效期內(nèi)的消息記錄,對記錄的操作盡量在內(nèi)存中完成,大大提高了內(nèi)存表的使用效率,減少了不必要的物理i/o操作,能大幅度提高系統(tǒng)處理數(shù)據(jù)的效率。以下結(jié)合附圖和具體實施例對本發(fā)明進(jìn)行詳細(xì)描述,但不作為對本發(fā)明的限定。


圖1是本發(fā)明內(nèi)存表結(jié)構(gòu)示例圖;圖2是本發(fā)明的內(nèi)存數(shù)據(jù)存儲裝置示意圖;圖3是本發(fā)明內(nèi)存表初始化流程圖;圖4是本發(fā)明新增記錄流程圖;圖5是本發(fā)明操作過程中某一時刻的內(nèi)存表結(jié)構(gòu)示意圖;圖6是本發(fā)明査詢記錄流程圖;圖7是本發(fā)明修改記錄流程圖;圖8是本發(fā)明刪除記錄流程圖;圖9是本發(fā)明遷移記錄流程圖;圖IO是本發(fā)明容量動態(tài)控制流程圖;圖11是本發(fā)明過期記錄清理流程圖。
具體實施方式
下面結(jié)合附圖對本發(fā)明內(nèi)存數(shù)據(jù)庫容量的控制進(jìn)行詳細(xì)描述。 請參閱圖1所示,是本發(fā)明表示內(nèi)存表的結(jié)構(gòu),按記錄在內(nèi)存表內(nèi)的生存 周期角度看,內(nèi)存表的記錄分別保存在三個不同的隊列中-1) , CQ (CurrentQueue,當(dāng)前隊列)隊列,為當(dāng)前哈希沖突隊列,用于 存放當(dāng)前正在處理的記錄;2) , DQ (Dirty Queue,臟隊列)隊列,用于存放當(dāng)前沒使用的但業(yè)務(wù)流程還沒有結(jié)束,還不能清理出內(nèi)存的記錄;3) , FQ (FreeQueue,空閑隊列)隊列,用于保存未用空間的節(jié)點。 內(nèi)存表的初始結(jié)構(gòu)中有三個鏈表,分別表示為A, Hash入口鏈表101,用Entry登記該鏈表的首地址,用于存放各記錄 Hash沖突隊列首地址信息。本鏈表的節(jié)點總數(shù)為Hash模值(HashModule)。B, Hash索引數(shù)據(jù)區(qū)鏈表102,用Index登記首地址,用于登記索引的指 針信息,包括.* CQ隊列的后向指針Next、 DQ隊列的前向與后向指針;CQ 隊列的后向指針Next指向同一 Hash值的下一個CQ隊列的記錄,CQ隊列的 首地址登記在Hash入口鏈表101中;DQ隊列的前向與后向指針指向DQ隊 列的前一條和后一條記錄。本鏈表的記錄總數(shù)為內(nèi)存表的總?cè)萘恐?。本鏈表?節(jié)點總數(shù)為CQ隊列、DQ隊列和FQ隊列三個隊列的記錄總和。C,記錄數(shù)據(jù)區(qū)鏈表103,用RecPtr登記首地址,用于存放記錄的實際數(shù) 據(jù)。因同一內(nèi)存表中的各記錄大小是一樣的,所以可通過首地址和偏移量迅速 找到對應(yīng)的記錄值。本鏈表的記錄總數(shù)為內(nèi)存表的總?cè)萘恐?。其中,CQ隊列、DQ隊列前二個隊列構(gòu)成了內(nèi)存表的二維結(jié)構(gòu)從縱向 看,所有的記錄都掛接在CQ隊列的Hash入口鏈表101上;從橫向看,如果 此記錄屬于臟記錄隊列節(jié)點,則就會連接到DQ隊列的Hash索引數(shù)據(jù)區(qū)鏈表 102,用前后向雙向指針表明其位置,有利于鏈表節(jié)點的增刪操作,如果此記 錄不屬于臟記錄隊列節(jié)點,則為當(dāng)前記錄隊列節(jié)點,橫向指針無鏈接信息。在內(nèi)存表結(jié)構(gòu)中,還有以下地址指針臟記錄隊列首尾指針、空閑隊列首 尾指針,分別用于登記DQ隊列和FQ隊列的首尾地址。本發(fā)明將內(nèi)存表由傳統(tǒng)的一維表(單條哈希沖突隊列)改用二維表(哈希 沖突隊列和臟記錄隊列)來表示,二維表的縱向鏈?zhǔn)歉鳑_突隊列的記錄鏈,同 一 Hash值的記錄放在一條鏈上,鏈頭連接在Hash入口鏈表101上(Hash入口鏈表101表頭登記內(nèi)存表表節(jié)點在內(nèi)存表的表節(jié)點中);二維表的橫向鏈?zhǔn)桥K記錄鏈,是一個雙向的鏈表結(jié)構(gòu),凡是接入臟記錄鏈的記錄都是屬于臟記錄 隊列節(jié)點,沒有接入臟記錄鏈的記錄則屬于當(dāng)前記錄隊列節(jié)點,臟記錄鏈中的記錄按使用先后插入,DQ隊列的首尾指針登記在內(nèi)存表的表節(jié)點中;二維表 內(nèi)縱橫鏈相交的節(jié)點就是內(nèi)存表的所有記錄(包括臟記錄、當(dāng)前沖突隊列記錄 和空閑隊列記錄)。進(jìn)一步地,在二維表中只登記相應(yīng)的鏈表指針信息,而記錄真正的值則是保存在初始化已申請好的記錄數(shù)據(jù)區(qū)鏈表103中,記錄數(shù)據(jù)區(qū)鏈表103的首地 址登記在內(nèi)存表的表節(jié)點中,因為同--內(nèi)存表的各記錄大小一樣,所以只需要 登記好數(shù)據(jù)區(qū)首地址和各記錄對應(yīng)的偏移量,就可取出相應(yīng)的記錄數(shù)據(jù),同時 因為記錄的值統(tǒng)一保存在一個地方,避免了保存在鏈表中時需要兩個拷貝(CQ 隊列與DQ隊列節(jié)點)的冗余情況,節(jié)省了很大的內(nèi)存空間。進(jìn)一步地,在內(nèi)存表使用過程中,實時統(tǒng)計出當(dāng)前的使用率((CQ記錄 總數(shù)+DQ記錄總數(shù))/內(nèi)存表總記錄數(shù)),如果使用率達(dá)到使用上限時,則從 二維表的橫向鏈即DQ隊列進(jìn)行批量清理,將DQ隊列中的節(jié)點清理出內(nèi)存, 釋放出相應(yīng)的節(jié)點入FQ隊列中。因為DQ隊列中的節(jié)點是按記錄的使用先后 進(jìn)行排序插入的,所以從DQ隊列的隊首開始清理,從而保證了記錄的FIFO(First In First Out,先進(jìn)先出)原則,確保內(nèi)存表中記錄的新鮮性和可用性, 達(dá)到提高內(nèi)存表利用率和減少物理數(shù)據(jù)庫I/O的目的,從而最終提高系統(tǒng)處理 數(shù)據(jù)的效率。進(jìn)一步地,在內(nèi)存表的表節(jié)點的結(jié)構(gòu)中,必須包含以下幾個主要的成員al),表名保存本內(nèi)存表的表名,用于唯一標(biāo)識內(nèi)存表;a2),表總?cè)萘縑ol:根據(jù)配置的內(nèi)存表總記錄數(shù)乘以一條記錄大小得到 本內(nèi)存表所需的最大內(nèi)存容量;a3) , Hash模值哈希函數(shù)的模值;a4), —條記錄大小RecSize:以字節(jié)為單位;a5) , CQ隊列的記錄數(shù)當(dāng)前隊列的記錄數(shù),初始化時為0;a6) , Hash入口鏈表101的入口指針Entry:用本記錄的關(guān)鍵字與哈希模 經(jīng)過哈希函數(shù)計算后得到的哈希表的入口值;a7) , Hash索引數(shù)據(jù)區(qū)鏈表102的指針I(yè)ndex:記錄的Hash索引指針信 息,包括縱向與橫向的指針信息;a8),記錄數(shù)據(jù)區(qū)鏈表103的指針RecPtr:用于存放記錄內(nèi)容的數(shù)據(jù);a9) , FQ隊列的隊首空閑隊列的隊首;a10) , FQ隊列的隊尾空閑隊列的隊尾;all) , DQ隊列的隊首臟記錄隊列的隊首;a12) , DQ隊列的隊尾臟記錄隊列的隊尾;a13) , DQ隊列的記錄數(shù)臟記錄隊列的記錄數(shù);其中Hash索引數(shù)據(jù)區(qū)的指針I(yè)ndex a7)應(yīng)有以下內(nèi)容a71),沖突隊列的下指針Next:指向同一個哈希值的沖突隊列的下 -個節(jié)點,用于維系二維表的縱向鏈。縱向鏈掛在Hash入口鏈表101上,Hash入口鏈表101的首地址登記在內(nèi)存表的表節(jié)點的Entry中;a72) , DQ隊列的前向指針PreRec:臟記錄隊列節(jié)點的前向指針; a73) , DQ隊列的后向指針NextRec:臟記錄隊列節(jié)點的后向指針。 其中,PreRec和NextRec用于維系二維表的橫向鏈。橫向鏈的鏈?zhǔn)孜驳刂返怯浽趦?nèi)存表的表節(jié)點的DQ隊列的隊首隊尾中。在此結(jié)構(gòu)下,利用相應(yīng)的操作接口就可以對內(nèi)存表的容量進(jìn)行動態(tài)監(jiān)控與調(diào)整。相應(yīng)的操作接口包括bl),初始化接口根據(jù)內(nèi)存表的參數(shù)申請內(nèi)存,并對相應(yīng)的成員進(jìn)行初始化。此時二維表中的所有節(jié)點都屬于FQ隊列節(jié)點。b2),增加記錄在新增記錄時,首先監(jiān)測內(nèi)存表當(dāng)前的使用率,在沒有達(dá)到使用上限時直接將記錄插入到內(nèi)存庫中,掛在二維表的縱向鏈中。如果內(nèi)存表當(dāng)前己達(dá)到使用上限,則啟動清理線程,對DQ隊列中的記錄進(jìn)行清理,釋放空間。b3),査詢記錄根據(jù)記錄的主鍵通過相應(yīng)的Hash函數(shù)生成的Hash索引 值Hashlndex,找到相應(yīng)的沖突隊列的入口,讀取相應(yīng)的記錄值。b4),修改記錄根據(jù)記錄的主鍵生成的Hashlndex,找到相應(yīng)的沖突隊 列的入口,讀取相應(yīng)的記錄值,用新值來更新舊值,如果此記錄在DQ隊列中, 則將此記錄移到CQ隊列中,以保證CQ隊列的記錄最新性。b5),刪除記錄根據(jù)記錄的主鍵生成的Hashlndex,找到相應(yīng)的沖突隊 列的入口,讀取相應(yīng)的記錄值;發(fā)消息給物理庫同步線程,將此消息同步入物 理庫(為保證處理效率,可用異步方式進(jìn)行同步),保證消息的正確性,再將 消息從內(nèi)存中刪除。b6),遷移記錄根據(jù)記錄的主鍵生成的Hashlndex,找到相應(yīng)的沖突隊 列的入口,讀取相應(yīng)的記錄值;如果此消息已在DQ隊列中,則不處理,如果 不在DQ隊列中,則將記錄從CQ隊列中遷移到DQ隊列中,以保證記錄不積 壓在CQ隊列中,造成內(nèi)存表溢出。b7),動態(tài)控制每當(dāng)有新記錄插入時,實時統(tǒng)計出內(nèi)存表的使用率,如 果達(dá)到已用上限,則啟動清理線程進(jìn)行數(shù)據(jù)清理,釋放空間;當(dāng)使用率已達(dá)到 可用下限時,則停止清理。b8),批量清理從DQ隊列首開始, 一次批量讀取多條記錄,先發(fā)消息給物理庫同步線程,將此消息同步入物理庫,后將記錄從內(nèi)存表中刪除。請參閱圖2所示,是本發(fā)明的內(nèi)存數(shù)據(jù)存儲裝置示意圖,結(jié)合圖l,該裝置包括數(shù)據(jù)存儲模塊IO、容量監(jiān)控模塊20;數(shù)據(jù)存儲模塊10又包括CQ記錄模塊110、 DQ記錄模塊120、 FQ記錄模塊130、記錄數(shù)據(jù)模塊140及節(jié)點 信息模塊150;CQ記錄模塊110,其通過各CQ隊列的記錄鏈分別存放同一哈希值的記 錄,并連接到哈希索引數(shù)據(jù)區(qū)鏈表上,且各記錄鏈的鏈頭連接在哈希入口鏈表上;DQ記錄模塊120,其通過臟記錄鏈存放臟記錄,并將接入臟記錄鏈的記 錄連接到DQ隊列的哈希索引數(shù)據(jù)區(qū)鏈表上;接入所述臟記錄鏈的記錄屬于 DQ隊列節(jié)點,未接入臟記錄鏈的記錄屬于當(dāng)前記錄隊列節(jié)點,臟記錄鏈中的 臟記錄按使用先后插入;各CQ隊列的記錄鏈與臟記錄鏈相交的節(jié)點為臟記錄、當(dāng)前沖突隊列記錄 和空閑隊列記錄;FQ記錄模塊130用于存放空閑隊列記錄;記錄數(shù)據(jù)模塊140,連接CQ記錄模塊110、 DQ記錄模塊120、 FQ記錄 模塊130,其通過記錄數(shù)據(jù)區(qū)鏈表保存臟記錄、當(dāng)前沖突隊列記錄及空閑隊列 記錄對應(yīng)的記錄數(shù)據(jù);節(jié)點信息模塊150,連接CQ記錄模塊110、 DQ記錄模塊120、 FQ記錄 模塊130、記錄數(shù)據(jù)模塊140,用于存放哈希入口鏈表的表頭信息、DQ隊列 的首尾指針信息、FQ的首尾指針信息及記錄數(shù)據(jù)區(qū)鏈表的首地址信息;容量監(jiān)控模塊20通過不同的操作接口對數(shù)據(jù)存儲模塊10進(jìn)行相應(yīng)的動態(tài) 監(jiān)控與調(diào)整。操作接口包括初始化接口 、增加記錄接口 、査詢記錄接口 、修改記錄接口 、 刪除記錄接口、遷移記錄接口、動態(tài)控制接口、批量清理接口等接口。請參閱圖3所示,是本發(fā)明內(nèi)存表初始化操作流程,用于為內(nèi)存表的各隊列及節(jié)點申請好空間。步驟301,判斷此內(nèi)存表是否已存在,若存在,則不能再次初始化,錯誤并退出,否則生成新內(nèi)存表,執(zhí)行步驟302;步驟302,為Hash入口鏈表101申請空間并初始化好初值; 步驟303,為Hash索引節(jié)點申請空間,將內(nèi)存表的Hash索引數(shù)據(jù)區(qū)初始 成一 Hash索引數(shù)據(jù)區(qū)鏈表102 (首地址Index),各節(jié)點的Next為下- 節(jié)點 的Index值。FQ的首尾指針分別每時指向索引數(shù)據(jù)區(qū)的首尾節(jié)點; 步驟304,為記錄數(shù)據(jù)區(qū)鏈表103進(jìn)行初化-,步驟305,將索引節(jié)點初始化成初值,如記錄狀態(tài)、DQ隊列的前后向指 針等;以及步驟306,將結(jié)構(gòu)中的其他成員,如表空間的總?cè)萘?、記錄大小等進(jìn)行初 始化。為存儲與管理方便,將Hash入口鏈表101和記錄數(shù)據(jù)區(qū)鏈表103用一靜 態(tài)鏈表(如數(shù)組)實現(xiàn)。請參閱圖4所示,是本發(fā)明內(nèi)存表插入記錄操作流程。具體為步驟401,判斷本內(nèi)存表是否已存在,若不存在,則返回錯誤碼退出若 存在,執(zhí)行步驟402;步驟402,在記錄插入內(nèi)存表前,先要實時統(tǒng)計內(nèi)存表的使用率,并判斷 內(nèi)存表的使用率是否已達(dá)到上限,若內(nèi)存表的使用率沒有達(dá)到上限時,則執(zhí)行 步驟406,將記錄插入內(nèi)存表中;若內(nèi)存表的使用率達(dá)到上限時,則執(zhí)行步驟403;步驟403,累計新記錄插入請求次數(shù),并判斷請求次數(shù)是否達(dá)到清理上限, 若請求次數(shù)未達(dá)到清理上限(一定量)時,則執(zhí)行步驟406;若請求次數(shù)達(dá)到 清理上限時,執(zhí)行步驟404,啟動批量清理功能;該步驟中,累計新記錄插入請求次數(shù)的目的是避免頻繁的記錄清理。步驟404,當(dāng)內(nèi)存表的容量達(dá)到使用上限時,則調(diào)用清理線程將過期的記 錄從內(nèi)存表中清除,釋放出一定量空間,以保證內(nèi)存表的持續(xù)可用性;并判斷 內(nèi)存表的容量是否已達(dá)到可用下限,若不是,則執(zhí)行步驟406;若是,則執(zhí)行 步驟405;步驟405,記錄清理停止;步驟406,調(diào)用Hash處理函數(shù)計算本記錄的Hash入口值Entrylndex;步驟407,根據(jù)Entrylndex得到Hash沖突隊列的索引值Hashlndex,根據(jù) 索引值Hashlndex査詢Hash沖突隊列表,判斷此記錄是否已存在,若不存在, 則執(zhí)行步驟408;若存在,錯誤結(jié)束;步驟408,取出FQ隊列的隊首記錄(即頭節(jié)點)作為新記錄的Hash沖突 隊列存儲節(jié)點;步驟409,將從FQ隊列取出的節(jié)點Index索引號作為本記錄的沖突隊列 的Hash索引值Hashlndex;步驟410,將本節(jié)點的Hashlndex填入沖突隊列的Hash入口鏈表101中; 步驟411,登記本記錄的操作狀態(tài);步驟412,以Hashlndex作為偏移量,將本記錄的實際值存入記錄數(shù)據(jù)區(qū) 鏈表103中;以及步驟413,為了保證記錄按操作的順序以FIFO (First Input First Output, 先進(jìn)先出)方式排列在DQ隊列中,所以在記錄插入成功后,調(diào)用記錄遷移函 數(shù)將本記錄從CQ隊列遷移到DQ隊列尾。請參閱圖5所示,是本發(fā)明表示內(nèi)存表在操作過程中的某一時刻各記錄存 儲情況示意圖,可以比較清楚展示內(nèi)存表作為一個二維鏈表結(jié)構(gòu)控制記錄的情 況,縱向鏈表為各記錄的沖突隊列記錄節(jié)點,鏈表頭統(tǒng)一放在Hash入口鏈表 101中;橫向鏈表為臟記錄隊列記錄節(jié)點,記錄按先后順序插入,臟記錄隊列 的首尾信息保存在內(nèi)存表結(jié)構(gòu)中,這樣很容易根據(jù)首地址從隊首開始清理過期 記錄,保證留在內(nèi)存表中的記錄為最新使用過的記錄,且確保內(nèi)存表不會因記 錄過多而溢出。如圖6所示,是本發(fā)明表示査詢一條記錄的操作過程,因為不管記錄是在 CQ隊列還是在DQ隊列中,記錄的唯一標(biāo)識——Hash沖突表的Hash索引值 Hashlndex都保存在Hash入口鏈表101中,所以査詢時不需要知道記錄在那 個隊列中,只需要根據(jù)關(guān)鍵字通過Hash函數(shù)計算出對應(yīng)的Hash索引值 Hashlndex,根據(jù)Hash索引值Hashlndex在Hash入口鏈表101都能找到對應(yīng)的記錄,具體步驟步驟601,判斷內(nèi)存表是否可用,若可用,則執(zhí)行步驟602,若不可用, 則錯誤并退出;步驟602,根據(jù)記錄的主鍵調(diào)用Hash函數(shù)計算出該記錄的Hash入口鏈表 101的入口值Entrylndex;歩驟603 ,根據(jù)入口值Entrylndex從Hash入口鏈表1 (H中取出對應(yīng)的Hash 索引值HasWndex;步驟604,根據(jù)Hash索引值Hashlndex査找對應(yīng)的沖突隊列,并根據(jù)主 鍵判斷此記錄是否存在CQ隊列中,如果在CQ隊列中找到記錄,則執(zhí)行步驟 605;如果在CQ隊列中找不到記錄,則錯誤并退出;以及步驟605,根據(jù)記錄數(shù)據(jù)區(qū)首地址和本記錄的Hashlndex偏移量,取出本記錄的實際值。請參閱圖7所示,是本發(fā)明修改一條記錄的操作過程,修改記錄時先根據(jù) 關(guān)鍵字通過Hash函數(shù)計算出對應(yīng)的Hash索引值Hashlndex,根據(jù)Hash索引 值Hashlndex在Hash入口鏈表101中找到對應(yīng)的記錄,再根據(jù)Hash索引值 Hashlndex作為記錄值保存的偏移量取出對應(yīng)的舊值,開始的過程與査詢操作 一樣,具體步驟如下步驟701,判斷內(nèi)存表是否可用,若可用,則執(zhí)行步驟702,若不可用, 則錯誤并退出;步驟702,根據(jù)記錄的主鍵調(diào)用Hash函數(shù)計算出該記錄的Hash入口鏈表 101的入口值Entrylndex;步驟703,根據(jù)入口值Entrylndex從Hash入口鏈表IOI中取出對應(yīng)的Hash 索弓l值Hashlndex;步驟704,根據(jù)Hash索引值Hashlndex査找對應(yīng)的沖突隊列,并根據(jù)主 鍵判斷此記錄是否存在CQ隊列中,如果在CQ隊列中找到記錄,則執(zhí)行步驟 705;如果在CQ隊列中找不到記錄,則錯誤并退出;以及步驟705,取出記錄的舊值后,用新值替換舊值;并判斷此記錄是否在 DQ隊列中,如果此記錄是在DQ隊列中,則執(zhí)行步驟706,如果此記錄不是 在DQ隊列中,則成功退出;以及步驟706,為保證CQ隊列中的記錄最新性,當(dāng)此記錄是在DQ隊列中時, 將記錄從DQ隊列中遷移到CQ隊列中。請參閱圖8所示,是本發(fā)明表示刪除一條記錄的操作過程,刪除記錄時先 根據(jù)關(guān)鍵字通過Hash函數(shù)計算出對應(yīng)的Hash索引值Hashlndex,再根據(jù)Hash索引值Hashlndex在Hash入口鏈表101中找到對應(yīng)的記錄,具體步驟如下 步驟801,判斷內(nèi)存表是否可用,若可用,則執(zhí)行步驟802,若不可用, 則錯誤并退出;步驟802,根據(jù)記錄的主鍵調(diào)用Hash函數(shù)計算出該記錄的Hash入口鏈表 101的入口值Entrylndex;步驟803,根據(jù)入口值Entrylndex從Hash入口鏈表101中取出對應(yīng)的Hash 索引值Hashlndex;步驟804,根據(jù)Hash索引值Hashlndex査找對應(yīng)的沖突隊列,并根據(jù)主 鍵判斷此記錄是否存在CQ隊列中,如果在CQ隊列中找到記錄,則執(zhí)行步驟 805;如果在CQ隊列中找不到記錄,則錯誤并退出;步驟805,根據(jù)記錄的DQ隊列的前后向指針及DQ隊列的首尾指針,判 斷此記錄是否在DQ隊列中,如果此記錄在DQ隊列中,則執(zhí)行806,如果此 記錄不在DQ隊列中,則執(zhí)行807;步驟806,將此記錄先從DQ隊列中斷開,再將此記錄從DQ隊列移到CQ 隊列中;步驟807,將記錄從內(nèi)存表中刪除,即將記錄從CQ隊列中刪除;以及 步驟808,釋放出本記錄的空間,將本記錄節(jié)點置空,歸還到FQ隊列中。 請參閱圖9所示,是本發(fā)明記錄從CQ隊列中遷移到DQ隊列中的操作過 程,遷移的目的是為保證CQ隊列只保存最新的記錄,而對那些近期可能不再 使用到業(yè)務(wù)流程還沒有結(jié)束且不能從內(nèi)存表中刪除的記錄,需要從CQ隊列中 遷移到DQ隊列中。遷移時先根據(jù)關(guān)^鍵字通過Hash函數(shù)計算出對應(yīng)的Hash 索引值Hashlndex,再根據(jù)Hash索引值Hashlndex在Hash入口鏈表101找到 對應(yīng)的記錄,檢査此記錄是否在DQ隊列中,如果不在,則將此記錄插入DQ 隊列尾。具體步驟如下步驟901,判斷內(nèi)存表是否可用,若可用,則執(zhí)行步驟902,若不可用, 則錯誤并退出;步驟902,根據(jù)記錄的主鍵調(diào)用Hash函數(shù)計算出該記錄的Hash入口鏈表 101的入口值Entrylndex;步驟903 ,根據(jù)入口值Entiylndex從Hash入口鏈表101中取出對應(yīng)的Hash 索引值Hashlndex;步驟904,根據(jù)Hash索引值Hashlndex査找對應(yīng)的沖突隊列,并根據(jù)主 鍵判斷此記錄是否在CQ隊列中,如果在CQ隊列中找到此記錄,則執(zhí)行步驟 905;如果在CQ隊列中找不到此記錄,則錯誤并退出;步驟905,根據(jù)記錄的DQ隊列的前后向指針及DQ的首尾指針,判斷此 記錄是否在DQ隊列中;如果記錄不在DQ隊列中,則執(zhí)行步驟906;如果記 錄在DQ隊列中,則成功退出;以及步驟906,將記錄插入到DQ隊列的隊尾。請參閱圖10所示,是本發(fā)明表示動態(tài)控制內(nèi)存表空間的操作流程。如果 使用率達(dá)到最高使用上限,則啟動清理線程,進(jìn)行清理。為保證清理的效率, 一般采用批量清理的方式。為防止清理線程無限制的清理,當(dāng)使用率清理到可 用下限時,則停止本次清理工作。當(dāng)使用率達(dá)上限時,并不立即啟動清理線程 立即開始清理,而是先累加清理請求次數(shù),當(dāng)請求清理次數(shù)達(dá)到一定量時,則 開始啟動清理線程清理,原因是如果一有清理請求就開始啟動清理線程,那就 會發(fā)生清理線程不停地被調(diào)用,大大消耗系統(tǒng)的資源,使系統(tǒng)陷入近似死循環(huán) 的僵局。在內(nèi)存表使用率達(dá)到上限時,內(nèi)存表并不是全部用滿,還有一部分空 間可用,只要調(diào)整好請求清理次數(shù)和業(yè)務(wù)量間的比例,完全可以保證在清理線 程啟動前內(nèi)存表有空閑結(jié)點給新記錄使用。具體為步驟1001,判斷本內(nèi)存表是否已存在,若不存在,則返回錯誤碼退出; 若存在,執(zhí)行步驟1002;步驟1002,在記錄插入內(nèi)存表前,先要實時統(tǒng)計內(nèi)存表的使用率,并判 斷內(nèi)存表的使用率是否已達(dá)到上限,若內(nèi)存表的使用率沒有達(dá)到上限時,則執(zhí) 行步驟1006,將記錄插入內(nèi)存表中;若內(nèi)存表的使用率達(dá)到上限時,則執(zhí)行 步驟1003;步驟1003,累計新記錄插入請求次數(shù),并判斷請求次數(shù)是否達(dá)到清理上 限,若請求次數(shù)未達(dá)到清理上限(一定量)時,則執(zhí)行步驟1006;若請求次 數(shù)達(dá)到清理上限時,執(zhí)行步驟1004,啟動批量清理功能;該步驟中,累計新記錄插入請求次數(shù)的目的是避免頻繁的記錄清理。步驟1004,當(dāng)內(nèi)存表的容量達(dá)到使用上限時,則調(diào)用清理線程將過期的 記錄從內(nèi)存表中清除,釋放出一定量空間,以保證內(nèi)存表的持續(xù)可用性;并判 斷內(nèi)存表的容量是否己達(dá)到可用下限,若不是,則執(zhí)行步驟1006;若是,則執(zhí)行步驟1005;步驟1005,記錄清理停止;以及步驟1006,將記錄插入內(nèi)存表中。上述步驟1001中,在有新記錄需要插入時,采用以下公式實時計算出當(dāng)前內(nèi)存表的使用率使用率=((CQ記錄總數(shù)+DQ記錄總數(shù))/內(nèi)存表的總?cè)萘?*100 上述步驟1003中,為減少清理的頻度,采取批量清理的方式,由清理線 程進(jìn)行批量清理。請參閱圖ll所示,是本發(fā)明表示清理線程批量清理的操作過程,當(dāng)清理 線程收到開始清理的消息后,從DQ隊列的首節(jié)點開始,循環(huán)進(jìn)行清理過期記 錄。先從DQ隊列中取出相應(yīng)的Hash索引值Hashlndex,根據(jù)Hash索引值 Hashlndex在Hash入口鏈表101找到對應(yīng)的記錄,先向物理同步進(jìn)程發(fā)送同 步消息,將本消息更新入物理數(shù)據(jù)庫,再將本記錄從內(nèi)存表中刪除。 一次清理 的數(shù)量可根據(jù)業(yè)務(wù)量動態(tài)設(shè)置,一般只在保證每次清理出的空閑節(jié)點多于請求 插入的新記錄節(jié)點就可,具體步驟如下步驟1101,根據(jù)參數(shù)配置文件中批量清理值判斷清理是否結(jié)束,如果結(jié)束,則成功退出,結(jié)束;如果沒有結(jié)束,則執(zhí)行步驟1102;步驟1102,從DQ隊列首地址開始取一條記錄,因為DQ是雙向指針鏈 表,所以很容易對鏈表進(jìn)行操作-,步驟1103,取出一條記錄后,為保證內(nèi)存記錄與物理庫記錄的一致性, 所以先發(fā)消息給物理庫同步進(jìn)程,將本記錄放入同步隊列中,等待同步入物理 庫,并轉(zhuǎn)入步驟1106;步驟1104,將本記錄從DQ隊列中刪除;步驟1105,把記錄歸還到空閑隊列,并返回至步驟1101;步驟1106,物理庫同步線程收到消息后,將記錄放入同步隊列中; 步驟1107,等同步時機到來時,將記錄同步入物理庫中。 同步時機有兩個 一是同步隊列滿,二是定時同步時間到。這樣,就保證了記錄信息不會丟失。一般來說,原則上對于含有數(shù)據(jù)庫操作的聯(lián)機事務(wù)處理系統(tǒng)(OnlineTransaction Processing, OLTP)都可使用本發(fā)明的內(nèi)存表來提高數(shù)據(jù)庫操作效率,用本發(fā)明的內(nèi)存表方法能能大大減少物理數(shù)據(jù)庫的物理I/O操作。本發(fā)明通過對內(nèi)存表的空間進(jìn)行實時控制和調(diào)整,盡可能將最新的有效期 內(nèi)的消息記錄操作在內(nèi)存數(shù)據(jù)庫進(jìn)行,最大可能地利用內(nèi)存操作速度高于物理 數(shù)據(jù)庫操作的特點,來提高系統(tǒng)的數(shù)據(jù)處理性能,并保證內(nèi)存數(shù)據(jù)庫的穩(wěn)定可 用性與健壯性。當(dāng)然,本發(fā)明還可有其他多種實施例,在不背離本發(fā)明精神及其實質(zhì)的情 況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但 這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1. 一種具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置,其特征在于,包括數(shù)據(jù)存儲模塊、容量監(jiān)控模塊;所述數(shù)據(jù)存儲模塊又包括CQ記錄模塊、DQ記錄模塊、FQ記錄模塊、記錄數(shù)據(jù)模塊及節(jié)點信息模塊;所述CQ記錄模塊,用于通過各CQ隊列的記錄鏈分別存放同一哈希值的記錄,并連接到哈希索引數(shù)據(jù)區(qū)鏈表上,且所述各記錄鏈的鏈頭連接在哈希入口鏈表上;所述DQ記錄模塊,用于通過臟記錄鏈存放臟記錄,并將接入所述臟記錄鏈的記錄連接到所述哈希索引數(shù)據(jù)區(qū)鏈表上;所述接入所述臟記錄鏈的記錄屬于DQ隊列節(jié)點,未接入所述臟記錄鏈的記錄屬于當(dāng)前記錄隊列節(jié)點,所述臟記錄鏈中的臟記錄按使用先后插入;所述各CQ隊列的記錄鏈與所述臟記錄鏈相交的節(jié)點為臟記錄、當(dāng)前沖突隊列記錄和空閑隊列記錄;所述FQ記錄模塊用于存放所述空閑隊列記錄;所述記錄數(shù)據(jù)模塊,連接所述CQ記錄模塊、所述DQ記錄模塊、所述FQ記錄模塊,用于通過記錄數(shù)據(jù)區(qū)鏈表保存所述臟記錄、所述當(dāng)前沖突隊列記錄及所述空閑隊列記錄對應(yīng)的記錄數(shù)據(jù);所述節(jié)點信息模塊,連接所述CQ記錄模塊、所述DQ記錄模塊、所述FQ記錄模塊、所述記錄數(shù)據(jù)模塊,用于存放所述哈希入口鏈表的表頭信息、所述DQ隊列的首尾指針信息、所述FQ的首尾指針信息及所述記錄數(shù)據(jù)區(qū)鏈表的首地址信息;所述容量監(jiān)控模塊通過不同的操作接口對所述數(shù)據(jù)存儲模塊進(jìn)行相應(yīng)的動態(tài)監(jiān)控與調(diào)整。
2、 根據(jù)權(quán)利要求1所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置, 其特征在于,所述操作接口包括初始化接口、增加記錄接口、査詢記錄接口、 修改記錄接口、刪除記錄接口、遷移記錄接口、動態(tài)控制接口和/或批量清理 接口。
3、 一種具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置的實現(xiàn)方法,其特征 在于,包括步驟一,設(shè)置包含縱向鏈和橫向鏈的二維表表示內(nèi)存表,所述縱向鏈為各CQ隊列的記錄鏈, 一條所述記錄鏈存放同一哈希值的記錄,并連接到哈希索 引數(shù)據(jù)區(qū)鏈表上,所述記錄鏈的鏈頭連接在哈希入口鏈表上,所述哈希入口鏈 表的表頭登記在所述內(nèi)存表的表節(jié)點中;所述橫向鏈為臟記錄鏈,接入所述臟記錄鏈的記錄屬于DQ隊列節(jié)點,并 連接到所述哈希索引數(shù)據(jù)區(qū)鏈表上,未接入所述臟記錄鏈的記錄屬于當(dāng)前記錄 隊列節(jié)點,所述臟記錄鏈中的記錄按使用先后插入,所述DQ隊列的首尾指針 登記在所述內(nèi)存表的表節(jié)點中;所述縱向鏈、橫向鏈相交的節(jié)點是所述內(nèi)存表的所有記錄,包括臟記錄、 當(dāng)前沖突隊列記錄和空閑隊列記錄,所述空閑隊列記錄存放在所述FQ隊列, 且所述FQ隊列的首尾指針登記在所述內(nèi)存表的表節(jié)點中;所述臟記錄、所述 當(dāng)前沖突隊列記錄和所述空閑隊列記錄對應(yīng)的記錄數(shù)據(jù)保存在記錄數(shù)據(jù)區(qū)鏈 表中,該記錄數(shù)據(jù)區(qū)鏈表的首地址登記在所述內(nèi)存表的表節(jié)點中;及步驟二,通過相應(yīng)的操作接口對所述內(nèi)存表的容量進(jìn)行相應(yīng)的動態(tài)監(jiān)控與 調(diào)整。
4、 根據(jù)權(quán)利要求3所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置的 實現(xiàn)方法,其特征在于,所述內(nèi)存表的表節(jié)點的結(jié)構(gòu)具體包括表名、表總?cè)?量、哈希模值、每條記錄的大小、哈希入口鏈表的入口指針、哈希索引數(shù)據(jù)區(qū) 鏈表的指針、記錄數(shù)據(jù)區(qū)的指針、FQ隊列的隊首和隊尾、DQ隊列的隊首和 隊尾、DQ隊列的記錄數(shù)、CQ隊列的記錄數(shù);其中,所述哈希索引數(shù)據(jù)區(qū)鏈 表的指針又包括CQ隊列的下指針、DQ隊列的前向指針、DQ隊列的后向指 針。
5、 根據(jù)權(quán)利要求3或4所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝 置的實現(xiàn)方法,其特征在于,所述步驟二中,還包括通過初始化接口對所述內(nèi)存表進(jìn)行初始化的步驟,具體為根據(jù)所述內(nèi)存表的參數(shù)申請內(nèi)存,并對相應(yīng)的成員進(jìn)行初始化,初始化后所述二維表中的所有節(jié)點都屬于所述FQ隊列節(jié)點。
6、 根據(jù)權(quán)利要求4所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)舉存儲裝置的實現(xiàn)方法,其特征在于,所述步驟二中,還包括通過增加記錄接口在所述內(nèi) 存表中增加記錄的步驟,具體為監(jiān)測所述內(nèi)存表當(dāng)前的使用率并根據(jù)該使用率判斷所述內(nèi)存表當(dāng)前是否達(dá)到使用上限;若未達(dá)到使用上限,則直接將該記 錄插入到內(nèi)存數(shù)據(jù)庫,并掛在所述縱向鏈中;若已達(dá)到使用上限,則啟動清理 線程,對所述DQ隊列中的記錄進(jìn)行清理,釋放空間。
7、 根據(jù)權(quán)利要求3或4所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝 置的實現(xiàn)方法,其特征在于,所述步驟二中,還包括通過査詢記錄接口在所 述內(nèi)存表中查詢記錄的步驟,具體為根據(jù)該記錄的主鍵生成的哈希索引值找 到相應(yīng)的CQ隊列的入口,讀取相應(yīng)的記錄值。
8、 根據(jù)權(quán)利要求3或4所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝 置的實現(xiàn)方法,其特征在于,所述步驟二中,還包括通過修改記錄接口在所 述內(nèi)存表中修改記錄的步驟,具體為根據(jù)該記錄的主鍵生成的哈希索引值找 到相應(yīng)的CQ隊列的入口,讀取相應(yīng)的記錄值,并用該記錄值更新舊值,若該 記錄在所述DQ隊列中,則將該記錄移到所述CQ隊列。
9、 根據(jù)權(quán)利要求3或4所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝 置的實現(xiàn)方法,其特征在于,所述步驟二中,還包括通過刪除記錄接口在所 述內(nèi)存表中刪除記錄的步驟,具體為根據(jù)該記錄的主鍵生成的哈希索引值找 到相應(yīng)的CQ隊列的入口,讀取相應(yīng)的記錄值;發(fā)送消息給物理數(shù)據(jù)庫同步線 程,由該物理數(shù)據(jù)庫同步線程將該消息同步入物理數(shù)據(jù)庫,再將該消息從內(nèi)存 中刪除。
10、 根據(jù)權(quán)利要求3或4所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置的實現(xiàn)方法,其特征在于,所述步驟二中,還包括通過遷移記錄接口在所 述內(nèi)存表中遷移記錄的步驟,具體為根據(jù)該記錄的主鍵生成的哈希索引值找 到相應(yīng)的CQ隊列的入口,讀取相應(yīng)的記錄值;若該記錄已在所述DQ隊列中,則不處理,若該記錄不在所述DQ隊列中,則將該記錄從所述CQ隊列遷移到 所述DQ隊列。
11 、根據(jù)權(quán)利要求4所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置的實現(xiàn)方法,其特征在于,所述步驟二中,還包括通過動態(tài)控制接口對所述內(nèi) 存表中的記錄進(jìn)行動態(tài)控制的步驟,具體為當(dāng)有記錄插入時,實時統(tǒng)計出所 述內(nèi)存表當(dāng)前的使用率;并根據(jù)該使用率判斷所述內(nèi)存表當(dāng)前是否達(dá)到已用上 限或可用下限,若達(dá)到已用上限時,啟動清理線程進(jìn)行數(shù)據(jù)清理,釋放空間; 若達(dá)到可用下限時,停止清理。
12、 根據(jù)權(quán)利要求3或4所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置的實現(xiàn)方法,其特征在于,所述步驟二中,還包括通過批量清理接口對所 述內(nèi)存表中的記錄進(jìn)行批量清理的步驟,具體為從所述DQ隊列首開始,--次批量讀取多條記錄;發(fā)送消息給物理數(shù)據(jù)庫同步線程,由所述物理數(shù)據(jù)庫同 步線程將該消息同步入所述物理數(shù)據(jù)庫,再將記錄從所述內(nèi)存表中刪除。
13、 根據(jù)權(quán)利要求6或11所述的具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲 裝置的實現(xiàn)方法,其特征在于,所述使用率為所述CQ隊列的記錄總數(shù)與所述 DQ隊列的記錄總數(shù)之和與所述內(nèi)存表的總記錄數(shù)的比值。
全文摘要
本發(fā)明公開了一種具有容量動態(tài)控制功能的內(nèi)存數(shù)據(jù)存儲裝置及其實現(xiàn)方法,該方法包括步驟一,設(shè)置包含縱向鏈和橫向鏈的二維表表示內(nèi)存表,縱向鏈為各CQ隊列的記錄鏈,橫向鏈為臟記錄鏈,縱向鏈、橫向鏈相交的節(jié)點是內(nèi)存表的所有記錄,包括臟記錄、當(dāng)前沖突隊列記錄和空閑隊列記錄,空閑隊列記錄存放在FQ隊列,且FQ隊列的首尾指針登記在內(nèi)存表的表節(jié)點中;臟記錄、當(dāng)前沖突隊列記錄和空閑隊列記錄對應(yīng)的記錄數(shù)據(jù)保存在記錄數(shù)據(jù)區(qū)鏈表中,該記錄數(shù)據(jù)區(qū)鏈表的首地址登記在內(nèi)存表的表節(jié)點中;及步驟二,通過相應(yīng)的操作接口對內(nèi)存表的容量進(jìn)行相應(yīng)的動態(tài)監(jiān)控與調(diào)整。采用本發(fā)明大大提高了內(nèi)存表的使用效率,從而大幅度提高系統(tǒng)處理數(shù)據(jù)的效率。
文檔編號G06F12/00GK101241492SQ20071006361
公開日2008年8月13日 申請日期2007年2月6日 優(yōu)先權(quán)日2007年2月6日
發(fā)明者陶長標(biāo) 申請人:中興通訊股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
华安县| 郓城县| 乐安县| 灵武市| 孙吴县| 尤溪县| 高邑县| 蕲春县| 望都县| 施甸县| 南召县| 六枝特区| 荔浦县| 当涂县| 琼海市| 崇明县| 青浦区| 平塘县| 益阳市| 保德县| 城步| 九龙坡区| 铜山县| 察雅县| 洛宁县| 敦化市| 内乡县| 茂名市| 安平县| 威海市| 凤山市| 阳新县| 通渭县| 台北县| 微博| 灯塔市| 澳门| 信阳市| 芦山县| 杭州市| 神农架林区|