国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      內(nèi)存存儲數(shù)據(jù)的維護方法與裝置的制作方法

      文檔序號:6575245閱讀:132來源:國知局
      專利名稱:內(nèi)存存儲數(shù)據(jù)的維護方法與裝置的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及利用內(nèi)存存儲數(shù)據(jù)的技術(shù),尤其涉及一種能區(qū)分數(shù)據(jù)調(diào)用熱度 的內(nèi)存存儲數(shù)據(jù)的維護方法與裝置。
      背景技術(shù)
      隨著越來越多的移動增殖業(yè)務(wù)如短信、彩信等業(yè)務(wù)的開展及普及,移動增 殖業(yè)務(wù)的業(yè)務(wù)量每年都在快速增長,為了提高系統(tǒng)的數(shù)據(jù)處理能力,通信系統(tǒng) 中一般都采用內(nèi)存數(shù)據(jù)庫來存儲數(shù)據(jù)。內(nèi)存相對于普通存儲區(qū)而言,系統(tǒng)對其 的讀寫操作的處理速度將相當高,這就是目前內(nèi)存數(shù)據(jù)庫正^皮越來越多的業(yè)務(wù)
      系統(tǒng)所采用的主要原因。
      在目前的內(nèi)存數(shù)據(jù)庫系統(tǒng)中, 一般都是采用內(nèi)存數(shù)據(jù)庫和普通數(shù)據(jù)庫合設(shè) 的方式,因為內(nèi)存的容量是有限制的,在數(shù)據(jù)量很大而內(nèi)存空間不足的情況下, 可以將數(shù)據(jù)存儲在普通數(shù)據(jù)庫中以保證數(shù)據(jù)的不丟失。在這種應(yīng)用中,檢索數(shù) 據(jù)時如果在內(nèi)存中不能找到相應(yīng)的數(shù)據(jù)則需要到普通數(shù)據(jù)庫中進行檢索,這樣, 將導致數(shù)據(jù)處理性能下降。但數(shù)據(jù)在內(nèi)存數(shù)據(jù)庫中的生存周期是由業(yè)務(wù)層來決 定的,而不是由內(nèi)存數(shù)據(jù)庫主動控制的,因此業(yè)務(wù)層在對數(shù)據(jù)進行操作后如果 短時間不再操作或者不能預見什么時間會再次操作,通常就將內(nèi)存中的數(shù)據(jù)同 步到普通數(shù)據(jù)庫中,以保證有足夠的內(nèi)存空間提供給新數(shù)據(jù)使用,這樣很難保 證需要檢索的數(shù)據(jù)能在內(nèi)存中命中。而且相同的數(shù)據(jù)在內(nèi)存數(shù)據(jù)庫與普通數(shù)據(jù) 庫間反復傳輸時,會增加不必要的物理磁盤操作。
      數(shù)據(jù)操作的內(nèi)存命中率是影響這種系統(tǒng)性能的關(guān)鍵。同時,如果業(yè)務(wù)控制 出錯或者缺少對內(nèi)存數(shù)據(jù)庫使用率實時的監(jiān)控與管理,容易造成內(nèi)存數(shù)據(jù)庫被 占滿,最終導致業(yè)務(wù)中斷。有鑒于此,本發(fā)明的主要目的在于提供一種內(nèi)存存儲數(shù)據(jù)的維護方法與裝 置,能使調(diào)用熱度高的數(shù)據(jù)優(yōu)選存儲在內(nèi)存數(shù)據(jù)庫中,通過設(shè)置內(nèi)存存儲模式 使內(nèi)存維護更方便。
      為達到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的 一種內(nèi)存存儲數(shù)據(jù)的維護方法,包括
      將內(nèi)存區(qū)設(shè)置為內(nèi)存數(shù)據(jù)單元、控制塊和哈希入口 HE表的存儲模式,并 設(shè)置哈希沖突隊列HCQ、空閑隊列FQ和同步隊列SQ;以及
      在將所述HCQ中數(shù)據(jù)刪除時,將所刪除的數(shù)據(jù)添入所述SQ中,并在HE 表中保持所刪除的數(shù)據(jù)的關(guān)鍵字的哈希運算值;新增數(shù)據(jù)時,從所述FQ中選 擇空內(nèi)存數(shù)據(jù)單元存儲所述新增數(shù)據(jù),并將存儲所述新增數(shù)據(jù)內(nèi)存數(shù)據(jù)單元對 應(yīng)的控制塊置入所述HE表中待添加數(shù)據(jù)的關(guān)鍵字的哈希運算值所對應(yīng)的控制 塊列表中。
      優(yōu)選地,將內(nèi)存區(qū)設(shè)置為內(nèi)存數(shù)據(jù)單元、控制塊和哈希入口 HE表的存儲 模式,并設(shè)置哈希沖突隊列HCQ、空閑隊列FQ和同步隊列SQ,包括
      將每個數(shù)據(jù)存儲于一個內(nèi)存數(shù)據(jù)單元中,為每個內(nèi)存數(shù)據(jù)單元對應(yīng)設(shè)置一 個控制塊,所述控制塊記錄有存儲所述數(shù)據(jù)的所述內(nèi)存數(shù)據(jù)單元的地址信息、 所述數(shù)據(jù)的關(guān)鍵字以及所述數(shù)據(jù)所屬隊列的信息;所述HE表按所述數(shù)據(jù)的關(guān) 鍵字信息的哈希運算值確定存儲所述數(shù)據(jù)的控制塊的首地址信息,哈希運算值 相同的兩個以上的數(shù)據(jù)的控制塊通過指針關(guān)聯(lián),在所述HE表中的所述數(shù)據(jù)的 關(guān)鍵字的哈希運算值對應(yīng)的地址中存儲關(guān)聯(lián)控制塊的首地址信息;所述FQ包 括尚未存儲數(shù)據(jù)的內(nèi)存數(shù)據(jù)單元的信息;所述SQ包括從所述HCQ刪除的數(shù)據(jù) 隊列的信息,所述SQ中的數(shù)據(jù)被同步到內(nèi)存外部的存儲區(qū);所述HCQ包括哈 希運算值相同的兩個以上的數(shù)據(jù)以及當前被調(diào)用的數(shù)據(jù);所述數(shù)據(jù)通過控制塊 中的所述數(shù)據(jù)所屬隊列的信息與所述HCQ及SQ關(guān)聯(lián)。
      優(yōu)選地,所述SQ中的數(shù)據(jù)按調(diào)用熱度由低到高的順序進行排序,調(diào)用熱度最高的數(shù)據(jù)位于所述SQ的最尾端;從所述HCQ中刪除的數(shù)據(jù),修改刪除數(shù) 據(jù)的控制塊中的所屬隊列的信息,與所述SQ關(guān)聯(lián),且位于所述SQ的最尾端。 優(yōu)選地,刪除所述SQ的內(nèi)存數(shù)據(jù)單元中數(shù)據(jù)時,由首地址處的數(shù)據(jù)開始 刪除。
      優(yōu)選地,所述方法還包括
      對當前的內(nèi)存容量進行監(jiān)控,當前內(nèi)存容量低于設(shè)定閾值時,刪除所述SQ 的內(nèi)存數(shù)據(jù)單元中的數(shù)據(jù),修改所刪除數(shù)據(jù)的內(nèi)存數(shù)據(jù)單元的控制塊中的所述 數(shù)據(jù)所屬隊列的信息,與所述FQ關(guān)聯(lián)。
      優(yōu)選地,所述方法還包括
      查找數(shù)據(jù)時,對所述數(shù)據(jù)的關(guān)鍵字進行哈希運算得到哈希運算值,根據(jù)所 述哈希運算值在所述HE表中的對應(yīng)地址處所存儲的控制塊的首地址信息,并 進一步查找出首地址對應(yīng)的控制塊,若所查找出的首地址對應(yīng)的控制塊為一個, 則該控制塊即為所述數(shù)據(jù)的控制塊,該控制塊中所指示的內(nèi)存數(shù)據(jù)單元中的數(shù) 據(jù)即為所查找的所述數(shù)據(jù);若所查找出的首地址對應(yīng)的控制塊為兩個以上,則 按控制塊中指針信息遍歷每個控制塊,查找與所述數(shù)據(jù)的關(guān)鍵字匹配的控制塊, 該控制塊中所指示的內(nèi)存數(shù)據(jù)單元中的數(shù)據(jù)即為所查找的所述數(shù)據(jù)。
      優(yōu)選地,新增數(shù)據(jù)時,將所述數(shù)據(jù)存儲于所述FQ中的一個內(nèi)存數(shù)據(jù)單元 中,并修改存儲所述數(shù)據(jù)的內(nèi)存數(shù)據(jù)單元的控制塊記載所述數(shù)據(jù)的關(guān)鍵字并 修改所述數(shù)據(jù)所屬隊列的信息,與所述HCQ關(guān)聯(lián)且位于所述HCQ的最尾端; 對所述數(shù)據(jù)的關(guān)鍵字進行哈希運算得到哈希運算值,判斷所述哈希運算值在所 述HE表中的對應(yīng)地址中是否已存儲有控制塊的首地址,若有,則不再存儲該 數(shù)據(jù)的控制塊的首地址,否則存儲該數(shù)據(jù)的控制塊的首地址。
      一種內(nèi)存存儲數(shù)據(jù)的維護裝置,包括
      設(shè)置模塊,用于將內(nèi)存區(qū)設(shè)置為內(nèi)存數(shù)據(jù)單元、控制塊和HE表的存儲才莫 式,并設(shè)置HCQ、 FQ和SQ;
      HCQ管理才莫塊,用于對HCQ中的隊列進行維護,通過隊列對應(yīng)數(shù)據(jù)存儲 的內(nèi)存數(shù)據(jù)單元對應(yīng)的控制塊鏈表實現(xiàn)隊列的刪除及增加,并通過隊列對應(yīng)數(shù)據(jù)的關(guān)鍵字的哈希值關(guān)聯(lián)到HE上;
      SQ管理才莫塊,用于對SQ中的隊列進行維護,在數(shù)據(jù)從HCQ中刪除時, 將被刪除的內(nèi)存數(shù)據(jù)單元掛接到SQ中隊列尾部,通過數(shù)據(jù)在SQ中隊列移出和 加入操作按調(diào)用熱度對數(shù)據(jù)進行排序;以及
      FQ管理才莫塊,用于對FQ中的隊列進行維護,用于管理空閑內(nèi)存數(shù)據(jù)單元 的分配和回收,新增數(shù)據(jù)時,根據(jù)新增數(shù)據(jù)的關(guān)鍵字的哈希值確定存儲新增數(shù) 據(jù)的內(nèi)存數(shù)據(jù)單元對應(yīng)的控制塊所應(yīng)關(guān)聯(lián)的HCQ中的控制塊鏈表,并關(guān)聯(lián)到 所述HCQ中的控制塊鏈表上。
      優(yōu)選地,所述裝置還包括
      數(shù)據(jù)維護模塊,用于對內(nèi)存中的內(nèi)存數(shù)據(jù)單元進行維護,實現(xiàn)對數(shù)據(jù)的插 入、刪除、修 文操作;以及
      內(nèi)存表管理才莫塊,用于管理所有內(nèi)存表的信息,維護內(nèi)存信息控制塊中的 數(shù)據(jù)。
      優(yōu)選地,所述設(shè)置單元將內(nèi)存區(qū)設(shè)置為內(nèi)存數(shù)據(jù)單元、控制塊和HE表的 存儲模式,以及設(shè)置HCQ、 FQ和SQ;其中,每個數(shù)據(jù)存儲于一個內(nèi)存數(shù)據(jù)單 元中,每個內(nèi)存數(shù)據(jù)單元對應(yīng)于一個控制塊,所述控制塊記錄有存儲所述數(shù)據(jù) 的所述內(nèi)存數(shù)據(jù)單元的地址信息、所述數(shù)據(jù)的關(guān)鍵字以及所述數(shù)據(jù)所屬隊列的 信息;所述HE表按所述數(shù)據(jù)的關(guān)鍵字信息的哈希運算值確定存儲所述數(shù)據(jù)的 控制塊的首地址信息,哈希運算值相同的兩個以上的數(shù)據(jù)的控制塊通過指針關(guān) 聯(lián),在所述HE表中的所述數(shù)據(jù)的關(guān)鍵字的哈希運算值對應(yīng)的地址中存儲關(guān)聯(lián) 控制塊的首地址信息;所速FQ包括尚未存儲數(shù)據(jù)的內(nèi)存數(shù)據(jù)單元的信息;所 述SQ包括從所述HCQ刪除的數(shù)據(jù)隊列的信息,所述SQ中的數(shù)據(jù)被同步到內(nèi) 存外部的存儲區(qū);所述HCQ包括哈希運算值相同的兩個以上的數(shù)據(jù)以及當前 被調(diào)用的數(shù)據(jù);所述數(shù)據(jù)通過控制塊中的所述數(shù)據(jù)所屬隊列的信息與所述HCQ 及SQ關(guān)聯(lián)。
      優(yōu)選地,所述裝置還包括
      容量監(jiān)控模塊,用于對當前的內(nèi)存容量進行監(jiān)控,當前內(nèi)存容量低于設(shè)定閾值時,觸發(fā)所述數(shù)據(jù)維護模塊刪除所述SQ的內(nèi)存數(shù)據(jù)單元中的數(shù)據(jù),修改 所刪除數(shù)據(jù)的內(nèi)存數(shù)據(jù)單元的控制塊中的所述數(shù)據(jù)所屬隊列的信息,所述FQ 管理模塊將所刪除數(shù)據(jù)的內(nèi)存數(shù)據(jù)單元與所述FQ關(guān)聯(lián)。 優(yōu)選地,所述裝置還包括
      查找模塊,用于查找數(shù)據(jù),對所述數(shù)據(jù)的關(guān)鍵字進行哈希運算得到哈希運 算值,根據(jù)所述哈希運算值在所述HE表中的對應(yīng)地址處所存儲的控制塊的首 地址信息,并進一步查找出首地址對應(yīng)的控制塊,若所查找出的首地址對應(yīng)的 控制塊為一個,則該控制塊即為所述數(shù)據(jù)的控制塊,該控制塊中所指示的內(nèi)存 數(shù)據(jù)單元中的數(shù)據(jù)即為所查找的所述數(shù)據(jù);若所查找出的首地址對應(yīng)的控制塊 為兩個以上,則按控制塊中指針信息遍歷每個控制塊,查找與所述數(shù)據(jù)的關(guān)鍵 字匹配的控制塊,該控制塊中所指示的內(nèi)存數(shù)據(jù)單元中的數(shù)據(jù)即為所查找的所 述數(shù)據(jù)。
      優(yōu)選地,所述數(shù)據(jù)維護4莫塊新增數(shù)據(jù)時,將所述數(shù)據(jù)存儲于所述FQ中的 一個內(nèi)存數(shù)據(jù)單元中,并修改存儲所述數(shù)據(jù)的內(nèi)存數(shù)據(jù)單元的控制塊記載所 述數(shù)據(jù)的關(guān)鍵字并修改所述數(shù)據(jù)所屬隊列的信息,觸發(fā)所述HCQ管理模塊將 存儲新增數(shù)據(jù)的內(nèi)存數(shù)據(jù)單元與所述HCQ關(guān)聯(lián)且置于所述HCQ的最尾端;對 所述數(shù)據(jù)的關(guān)鍵字進行哈希運算得到哈希運算值,判斷所述哈希運算值在所述 HE表中的對應(yīng)地址中是否已存儲有控制塊的首地址,若有,則不再存儲該數(shù)據(jù) 的控制塊的首地址,否則存儲該數(shù)據(jù)'的控制塊的首地址。
      本發(fā)明中,通過i殳置同步隊列(SQ, Synchron Queue)隊列,在內(nèi)存數(shù)據(jù) 庫中的數(shù)據(jù)的調(diào)用熱度降低時,將所述數(shù)據(jù)從哈希沖突隊列(HCQ, Hash Conflict Queue)中刪除,該刪除并非是將內(nèi)存數(shù)據(jù)單元中的實際數(shù)據(jù)刪除了 , 而是刪除了數(shù)據(jù)所屬的隊列,本發(fā)明將從HCQ中刪除的數(shù)據(jù)關(guān)聯(lián)到SQ中,并 將該關(guān)聯(lián)到SQ中的數(shù)據(jù)存儲到普通數(shù)據(jù)庫中;在內(nèi)存低于設(shè)定閾值時,通過 釋放SQ中的數(shù)據(jù)來彌補內(nèi)存空間的不足。由于設(shè)置了HE表,在查找數(shù)據(jù)時, 根據(jù)數(shù)據(jù)的關(guān)鍵字的哈希運算值即可確定數(shù)據(jù)的內(nèi)存表信息控制塊,根據(jù)其中 的內(nèi)存數(shù)據(jù)單元的地址信息即查找出數(shù)據(jù)。本發(fā)明將被頻繁訪問的數(shù)據(jù)篩選出來并保留在內(nèi)存中,提高了數(shù)據(jù)在內(nèi)存中的命中率,對數(shù)據(jù)的操作盡量在內(nèi)存 中完成,減少了不必要的輸入輸出操作,能大幅度提高系統(tǒng)處理數(shù)據(jù)的效率。 本發(fā)明實現(xiàn)簡單且實用。


      圖1為本發(fā)明內(nèi)存初始化后的結(jié)構(gòu)示意圖2為本發(fā)明內(nèi)存表初始化的操作流程圖3為本發(fā)明向內(nèi)存表增加數(shù)據(jù)的操作流程圖4為本發(fā)明從內(nèi)存表查詢數(shù)據(jù)的操作流程圖5為本發(fā)明從內(nèi)存表刪除數(shù)據(jù)的操作流程圖6為本發(fā)明容量監(jiān)控的操作流程圖7本發(fā)明內(nèi)存存儲數(shù)據(jù)的維護裝置的組成結(jié)構(gòu)示意圖。
      具體實施例方式
      本發(fā)明的基本思想是通過設(shè)置SQ隊列,在內(nèi)存數(shù)據(jù)庫中的數(shù)據(jù)的調(diào)用 熱度降低時,將所述數(shù)據(jù)從HCQ中刪除,該刪除并非是將內(nèi)存數(shù)據(jù)單元中的 實際數(shù)據(jù)刪除了,而是刪除了數(shù)據(jù)所屬的隊列,本發(fā)明將從HCQ中刪除的數(shù) 據(jù)關(guān)聯(lián)到SQ中,并將該關(guān)聯(lián)到SQ中的數(shù)據(jù)存儲到普通數(shù)據(jù)庫中;在內(nèi)存低于 設(shè)定閾值時,通過釋放SQ中的數(shù)據(jù)來彌補內(nèi)存空間的不足。由于設(shè)置了 HE 表,在查找數(shù)據(jù)時,根據(jù)數(shù)據(jù)的關(guān)鍵字的哈希運算值即可確定數(shù)據(jù)的內(nèi)存表信 息控制塊,根據(jù)其中的內(nèi)存數(shù)據(jù)單元的地址信息即查找出數(shù)據(jù)。本發(fā)明將被頻 繁訪問的數(shù)據(jù)篩選出來并保留在內(nèi)存中,提高了數(shù)據(jù)在內(nèi)存中的命中率,對數(shù) 據(jù)的操作盡量在內(nèi)存中完成,減少了不必要的輸入輸出操作,能大幅度提高系 統(tǒng)處理數(shù)據(jù)的效率。本發(fā)明實現(xiàn)簡單且實用。
      為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,以下舉實施例并參照 附圖,對本發(fā)明進一步詳細說明。
      本發(fā)明按數(shù)據(jù)在內(nèi)存表內(nèi)的生存周期角度看,內(nèi)存表的數(shù)據(jù)分別保存在三個不同的隊列中
      HCQ隊列,為當前哈希沖突隊列,用于存放當前正在處理(被用戶調(diào)用的) 的數(shù)據(jù)。
      SQ隊列,為同步隊列,用于存放當前已經(jīng)同步到物理磁盤中的數(shù)據(jù),也是 熱點(被多用戶多次調(diào)用)數(shù)據(jù)存放的隊列,在空閑內(nèi)存不夠時可以清除的數(shù) 據(jù)隊列。
      空閑隊列(FQ, Free Queue),用于^M^未用內(nèi)存數(shù)據(jù)單元。
      圖1為本發(fā)明內(nèi)存初始化后的結(jié)構(gòu)示意圖,如圖1所示,本發(fā)明內(nèi)存的初 始結(jié)構(gòu)中包括三個鏈表,分別為
      Hash入口 (HE, Hash Entry )化良101,用Entry登記鏈表的首地址,用 于存放各數(shù)據(jù)Hash運算值沖突的隊列首地址信息。本*的節(jié)點總數(shù)為Hash 模值(HashModule )。 HE鏈表(或HE表)101中,是根據(jù)對數(shù)據(jù)的關(guān)鍵字的 進行哈希運算的運算值來確定數(shù)據(jù)的控制塊的首地址存儲地址的,具體的,如 圖1所示,如果某數(shù)據(jù)的關(guān)鍵字的哈希運算值為k,則將該數(shù)據(jù)對應(yīng)的內(nèi)存數(shù) 據(jù)單元的控制塊的首地址信息存儲于HE鏈表101中的k地址處,存儲時判斷k 地址處是否已存儲有其他數(shù)據(jù)的控制塊的首地址,如果有,則將該數(shù)據(jù)對應(yīng)的 控制塊置入已存儲控制塊首地址所指示的控制塊鏈表的尾部,即此時為沖突隊 列,即該數(shù)據(jù)的關(guān)鍵字的哈希運算值k與其他數(shù)據(jù)的相同,此時,需在該數(shù)據(jù) 對應(yīng)的數(shù)據(jù)塊中記錄該數(shù)據(jù)的關(guān)鍵字,以方便查找出該數(shù)據(jù);如果沒有其他數(shù) 據(jù)塊的地址信息,則將該數(shù)據(jù)對應(yīng)的數(shù)椐塊作為哈希運算值k對應(yīng)數(shù)據(jù)的控制 塊的首地址,此時,該哈希運算值k對應(yīng)的數(shù)據(jù)僅有一個。
      內(nèi)存表信息控制塊鏈表102,用內(nèi)存表信息控制塊的索引登記首地址,用 于登記控制塊的指針信息,包括HCQ隊列或者FQ隊列的后向指針Next、 SQ 隊列的前向與后向指針;HCQ隊列的后向指針Next指向同一 Hash值的下一個 HCQ隊列的數(shù)據(jù),HCQ隊列的首地址登記在Hash入口表101中;SQ隊列的 前向與后向指針指向SQ隊列的前一條和后一條記錄。本鏈表的記錄總數(shù)為內(nèi) 存表的總?cè)萘恐?,控制塊與內(nèi)存數(shù)據(jù)區(qū)一一對應(yīng)。本鏈表的節(jié)點總數(shù)為HCQ隊列和FQ隊列兩個隊列的數(shù)據(jù)總和。
      內(nèi)存數(shù)據(jù)區(qū)鏈表103,用內(nèi)存數(shù)據(jù)區(qū)的首地址登記為隊首,用于存放實際 的數(shù)據(jù)。本鏈表的記錄總數(shù)為內(nèi)存表的總?cè)萘恐怠?br> 其中,HCQ隊列、SQ隊列和FQ隊列構(gòu)成了內(nèi)存表的三個控制管理隊列 所有的在用數(shù)據(jù)(HCQ隊列和SQ隊列中的數(shù)據(jù))都掛接在Hash入口鏈表101 中各個HCQ隊列上;如果此記錄屬于SQ隊列節(jié)點,則同時就會連接到SQ隊 列中,用前后向雙向指針表明其位置,有利于鏈表節(jié)點的增刪操作;對于未用 的內(nèi)存單元都掛接在FQ隊列上。本發(fā)明將內(nèi)存表由傳統(tǒng)的HCQ和FQ兩個隊 列管理,改為使用HCQ、 FQ和SQ三個隊列進行管理。在HCQ隊列中可以清 除的數(shù)據(jù)在被刪除的時候^i文入SQ隊列中,同時完成向物理磁盤的同步。SQ 隊列中的數(shù)據(jù)按先進先出(FIFO, First In First Out)方式管理,SQ隊列中的數(shù) 據(jù)通過被再次檢索(被多用戶多次調(diào)用時,置入HCQ中)而移出隊列,數(shù)據(jù) 操作完畢后(調(diào)用量較小或不再被調(diào)用)通過從HCQ中刪除被再次加入SQ隊 列,從而完成了熱點數(shù)據(jù)的動態(tài)篩選工作,這樣被再次檢索的概率最低的數(shù)據(jù) 排在SQ隊列首部,而不斷被檢索的熱點數(shù)據(jù)就會排在SQ隊列尾部。而從HCQ 中刪除的數(shù)據(jù),將置入SQ隊列尾部。本發(fā)明中,通過鏈表結(jié)構(gòu)中的指針來實 現(xiàn)相同隊列的數(shù)據(jù)的關(guān)聯(lián);不同的隊列之間通過內(nèi)存數(shù)據(jù)單元對應(yīng)的控制塊中 的數(shù)據(jù)所屬隊列信息而確定,所屬的隊列相同時,控制塊將以指針的形式形成 控制塊鏈表??臻g被回收到FQ隊列的時候,從SQ隊列首部開始回收,這樣就 可以把熱點數(shù)據(jù)保留在內(nèi)存中。
      在控制塊中只登記相應(yīng)的隊列指針信息,而數(shù)據(jù)真正的值則是保存在已申 請好的內(nèi)存數(shù)據(jù)區(qū)鏈表103中,內(nèi)存數(shù)據(jù)區(qū)g 103的首地址登記在內(nèi)存信息 控制塊中,因為同一內(nèi)存表的各數(shù)據(jù)大小一樣,所以只需要登記好數(shù)據(jù)區(qū)首地 址和各記錄對應(yīng)的偏移量,就可取出相應(yīng)的記錄數(shù)據(jù),同時因為數(shù)據(jù)的值統(tǒng)一 保存在一個地方,避免了同時保存在HCQ隊列和SQ隊列中時需要兩個拷貝的 冗余情況,節(jié)省了很大的內(nèi)存空間。
      本發(fā)明在內(nèi)存表使用過程中,實時統(tǒng)計出FQ隊列的空閑率為(內(nèi)存表總記錄數(shù)-HCQ隊列記錄總數(shù))/內(nèi)存表總記錄數(shù)),如杲內(nèi)存空閑率低于配置的 低水平位容量時,則從SQ隊列首部進行批量清理,將SQ隊列中的內(nèi)存單元回 收到FQ隊列中,此時,修改數(shù)據(jù)的控制塊中的所屬隊列的信息即可將SQ隊列 中的內(nèi)存數(shù)據(jù)單元添入FQ隊列中,即將被刪除數(shù)據(jù)的內(nèi)存數(shù)據(jù)單元的控制塊 中的數(shù)據(jù)所屬隊列信息修改為所屬FQ隊列即可,同時,修改該控制塊的指針 指向,插入到FQ隊列控制塊鏈表的尾部即可。因為SQ隊首是被訪問概率很低 的數(shù)據(jù),熱點數(shù)據(jù)在SQ隊尾從而保證熱點數(shù)據(jù)被保留在內(nèi)存中。
      如圖l所示,在內(nèi)存表的表節(jié)點的結(jié)構(gòu)中,還包括表名保存本內(nèi)存表 的表名,用于唯一標識內(nèi)存表;表總?cè)萘縑ol:根據(jù)配置的內(nèi)存表總記錄數(shù)乘 以一條數(shù)據(jù)大小得到本內(nèi)存表所需的最大內(nèi)存容量;Hash模值哈希函數(shù)的模 值;Hash入口表HE 101的入口指針Entry:用本記錄的關(guān)鍵字與哈希模經(jīng)過哈 希函數(shù)計算后得到的哈希表的入口值; 一條記錄大小RecSize:以字節(jié)為單位; 控制塊數(shù)據(jù)區(qū)首地址鏈表102的指針I(yè)ndex:用以定位隊列控制塊;HCQ隊列 記錄數(shù)內(nèi)存被占用的記錄數(shù);SQ隊列記錄數(shù)用于管理SQ隊列;FQ隊列 的隊首空閑隊列的隊首;FQ隊列的隊尾空閑隊列的隊尾;SQ隊列的隊首 同步隊列的隊首;SQ隊列的隊尾同步隊列的隊尾;內(nèi)存數(shù)據(jù)區(qū)地址記錄內(nèi) 存數(shù)據(jù)區(qū)鏈表103的指針RecPtr:用于存放記錄內(nèi)容的數(shù)據(jù);控制塊還包括以 下內(nèi)容
      沖突隊列或者空閑隊列的下條記錄指針Next:指向同一個哈希值的沖突隊 列的下一個節(jié)點;SQ隊列的前向指針PreRec:同步隊列節(jié)點的前向指針;SQ 隊列的后向指針NextRec:同步隊列節(jié)點的后向指針。其中,PreRec和NextRec 用于SQ隊列方便向前和向后查找。
      圖2為本發(fā)明內(nèi)存表初始化的操作流程圖,用于為內(nèi)存表的各隊列及M 申請空間,如圖2所示,本發(fā)明內(nèi)存表初始化包括以下步驟
      步驟201:判斷此內(nèi)存表是否已存在,若存在,則不能再次初始化,錯誤 并退出,否則生成新內(nèi)存表,執(zhí)行步驟202;
      步驟202:為Hash入口表HE申請空間并初始化好初值。即按圖1所示的結(jié)構(gòu)設(shè)置內(nèi)存表的結(jié)構(gòu),使內(nèi)存表劃分為多層次結(jié)構(gòu)。
      步驟203:隊列控制塊申請空間并初始化,并將所申請的內(nèi)存區(qū)首地址填 入步驟2 01創(chuàng)建的內(nèi)存信息控制塊中。即通過數(shù)據(jù)的內(nèi)存數(shù)據(jù)單元對應(yīng)的控制 塊中的所屬隊列信息的設(shè)定,使不同的內(nèi)存數(shù)據(jù)單元(主要是空的內(nèi)存數(shù)據(jù)單 元和存儲了數(shù)據(jù)的內(nèi)存數(shù)據(jù)單元)劃歸到不同的隊列中,通過控制塊中的指針 指向的修改或設(shè)置,使不同隊列中的控制塊形成相應(yīng)的控制塊*。
      步驟204:為內(nèi)存數(shù)插區(qū)申請空間并初始化,并將所申請的內(nèi)存區(qū)首地址 填入步驟201創(chuàng)建的內(nèi)存信息控制塊中。即將內(nèi)存數(shù)據(jù)單元的地址信息添加到 控制塊中,以通過控制塊查找到對應(yīng)的內(nèi)存數(shù)據(jù)單元,從而獲取對應(yīng)的數(shù)據(jù)。
      步驟205:初始化FQ隊列,將所有隊列控制塊都掛接到FQ隊列中,表示 所有內(nèi)存數(shù)據(jù)單元都是可用狀態(tài)。初始創(chuàng)建內(nèi)存表時,其中的內(nèi)存數(shù)據(jù)區(qū)中未 存儲任何的數(shù)據(jù),因此,內(nèi)存數(shù)據(jù)區(qū)的所有的內(nèi)存數(shù)據(jù)單元均屬于FQ隊列。 通過內(nèi)存數(shù)據(jù)單元對應(yīng)的控制塊中的所屬隊列信息的修改即可實現(xiàn)歸屬到FQ 隊列的操作。
      步驟206:將內(nèi)存表結(jié)構(gòu)中的其他成員,如表空間的總?cè)萘?、記錄大小?SQ首尾指針等進行初始化。
      圖2所示的流程,即是實現(xiàn)內(nèi)存表的結(jié)構(gòu)化處理,為實現(xiàn)之后的數(shù)據(jù)存儲 及管理而設(shè)置的。
      圖3為本發(fā)明向內(nèi)存表增加數(shù)據(jù)的操作流程圖,如圖3所示,本發(fā)明向內(nèi) 存表增加數(shù)據(jù)操作流程包括以下步驟
      步驟301:判斷內(nèi)存表是否存在,若不存在則返回相應(yīng)的錯誤碼退出,存 在則執(zhí)行302。
      步驟302:判斷FQ隊列空閑率是否低于配置的低水平位容量,若是執(zhí)行步 驟303;若足夠則轉(zhuǎn)到步驟304;
      步驟303:從SQ隊列首回收一定數(shù)量的內(nèi)存數(shù)據(jù)單元加入到FQ隊尾。即 從SQ隊列的首個內(nèi)存數(shù)據(jù)單元起,順序的刪除一定數(shù)量的數(shù)據(jù),修改這些刪 除數(shù)據(jù)后的內(nèi)存數(shù)據(jù)單元的控制塊的相應(yīng)信息,將其所屬的隊列修改為FQ。 SQ隊列中的數(shù)據(jù)雖然被刪除,但在對應(yīng)的物理存儲區(qū)中,仍保存有完整的數(shù)據(jù), 只是被刪除的數(shù)據(jù)不在內(nèi)存區(qū)了而已。
      步驟304:對需要插入的數(shù)據(jù)關(guān)鍵字進行Hash運算。這里,數(shù)據(jù)的關(guān)鍵字 是指數(shù)據(jù)的標識信息如數(shù)據(jù)名稱、所屬的類型等屬性信息,也可以是數(shù)據(jù)的摘 要信息。
      步驟305:判斷HCQ隊列中是否已存在相同的數(shù)據(jù)。才艮據(jù)運算結(jié)果在Hash 入口表HE上找到對應(yīng)位置的HCQ隊列,如果隊列已經(jīng)存在則遍歷隊列查看是 否已經(jīng)存在要插入數(shù)據(jù)關(guān)鍵字一致的數(shù)據(jù),如果存在則返回相應(yīng)的錯誤碼并退 出,如果不存在則執(zhí)^f亍步驟306。
      步驟306:從FQ頭取一隊列控制塊加入HCQ隊尾。即將該要插入的數(shù)據(jù) 存儲于FQ頭部對應(yīng)的內(nèi)存數(shù)據(jù)單元中,然后將該內(nèi)存數(shù)據(jù)單元的控制塊添入 到Hash運算結(jié)果對應(yīng)的沖突數(shù)據(jù)的控制塊鏈表中尾部,修改FQ頭隊列控制塊 的所屬隊列信息為屬于HCQ。
      根據(jù)數(shù)據(jù)的關(guān)鍵字的Hash運算結(jié)果,在HE表的對應(yīng)地址上查找是否已存 儲其他數(shù)據(jù)的控制塊的首地址信息,也即判斷Hash運算結(jié)果對應(yīng)的地址處是否 存儲有信息,如果有,則根據(jù)存儲信息(其他沖突數(shù)據(jù)的控制塊的首地址)的 指示,查找出其他數(shù)據(jù)的控制塊的首地址,遍歷該控制塊鏈表,查找是否有與 該要插入數(shù)據(jù)關(guān)鍵字一致的數(shù)據(jù),如果有,則說明要插入的數(shù)據(jù)已存在于HCQ 隊列中,無需再次存儲,而如果沒有,則將該需插入的數(shù)據(jù)的控制塊置入其他 數(shù)據(jù)的控制塊M中的尾部,即該要插入的數(shù)據(jù)與其他數(shù)據(jù)的Hash運算結(jié)果是 相同的,是本發(fā)明中的沖突隊列。而如果Hash運算結(jié)果對應(yīng)的地址處無任何數(shù) 據(jù),說明要插入的數(shù)據(jù)當前無沖突數(shù)據(jù),則將該要插入數(shù)據(jù)的數(shù)據(jù)塊的地址寫 入HE表中Hash運算結(jié)果對應(yīng)的地址處,作為未來與該數(shù)據(jù)沖突的所有數(shù)據(jù)的 首地址。
      圖4為本發(fā)明從內(nèi)存表查詢數(shù)據(jù)的操作流程圖,如圖4所示,本發(fā)明從內(nèi) 存表查詢數(shù)據(jù)操作流程包括以下步驟
      步驟401:判斷內(nèi)存表是否存在,若不存在則返回相應(yīng)的錯誤碼退出,存在則執(zhí)行402。
      步驟402:對需要查詢的數(shù)據(jù)關(guān)鍵字進行Hash運算,根據(jù)運算結(jié)果在Hash 入口表HE上找到對應(yīng)位置的HCQ隊列。該步驟的實現(xiàn)可參見前述圖3中的相 關(guān)描述。即利用待查詢數(shù)據(jù)的關(guān)鍵字的Hash運算結(jié)果確定該Hash運算結(jié)果所 對應(yīng)的沖突隊列中數(shù)據(jù)的控制塊的首地址,在對應(yīng)的控制塊鏈表中查找是否存 在與待查詢數(shù)據(jù)的關(guān)鍵字匹配的控制塊,如杲查找到則存在對應(yīng)的數(shù)據(jù),否則 HCQ隊列中不存在待查詢的數(shù)據(jù),該數(shù)據(jù)在物理存儲區(qū)中,執(zhí)行步驟404。
      步驟403:判斷HCQf人列中是否已存在該數(shù)據(jù),遍歷該Hash運算結(jié)果所 對應(yīng)的隊列,查看是否已經(jīng)存在要查詢數(shù)據(jù)關(guān)鍵字一致的數(shù)據(jù),如果不存在轉(zhuǎn) 入步驟404,如果存在則轉(zhuǎn)入步驟406。
      步驟404:判斷是否能從物理磁盤中查詢到相應(yīng)的數(shù)據(jù)。如果不能則返回 相應(yīng)的錯誤碼并返回,否則執(zhí)行步驟405。
      步驟405:從磁盤中讀取數(shù)據(jù)并調(diào)用所查詢的內(nèi)存數(shù)據(jù),并執(zhí)行步驟409: 成功返回所查詢數(shù)據(jù)的調(diào)用信息,如調(diào)用地址信息等。
      步驟406:判斷該查詢數(shù)據(jù)是否已存在于SQ隊列中,如果已經(jīng)存在則執(zhí)行 步驟407,否則轉(zhuǎn)入步驟408。對于內(nèi)存管理功能的一部分,所查詢的數(shù)據(jù)可能 因為持續(xù)時段內(nèi)沒有凈皮調(diào)用而置入了 SQ隊列中,對于這樣的數(shù)據(jù),由于被重 新調(diào)用而需將該數(shù)據(jù)置入到HCQ隊列中。需要i兌明的是,數(shù)據(jù)即使存在于SQ 隊列,其在HE表中仍存放有相應(yīng)的地址指示信息,即仍能通過HE表查詢到 相應(yīng)的數(shù)據(jù)。這里,也可以設(shè)定將SQ隊列中數(shù)據(jù)置入HCQ隊列的條件,如調(diào) 用次數(shù)超過設(shè)定次數(shù)時才執(zhí)行該操作,或被多少個用戶調(diào)用時才執(zhí)行該操作, 不然,相應(yīng)的數(shù)據(jù)仍存放在SQ隊列中(不會影響被調(diào)用和查詢)。
      步驟407:從SQ隊列中移出,放入HCQ中,并執(zhí)行步驟408。
      步驟408:才艮據(jù)隊列控制塊在隊列區(qū)的索引到內(nèi)存數(shù)據(jù)區(qū)中查詢相應(yīng)的數(shù) 據(jù),執(zhí)行步驟409。
      步驟409:成功返回所查詢的數(shù)據(jù)的調(diào)用信息,如調(diào)用地址信息等。
      修改內(nèi)存數(shù)據(jù)的流程與查詢數(shù)據(jù)的流程類似,只是找到數(shù)據(jù)后用新數(shù)據(jù)覆蓋舊數(shù)據(jù),這里不再贅述其實現(xiàn)流程。
      圖5為本發(fā)明從內(nèi)存表刪除數(shù)據(jù)的操作流程圖,如圖5所示,本發(fā)明從內(nèi) 存表刪除數(shù)據(jù)的操作流程包括以下步驟
      步驟501:判斷內(nèi)存表是否存在,若不存在則返回相應(yīng)的錯誤碼退出,存 在則執(zhí)行步驟502。
      步驟502:對需要查詢的數(shù)據(jù)關(guān)鍵字進行Hash運算。
      步驟503: HCQ隊列中是否存在沖突數(shù)據(jù)。即根據(jù)待刪除數(shù)據(jù)的關(guān)鍵字的 Hash運算結(jié)果查找HCQ隊列中是否存在相應(yīng)的數(shù)據(jù),即確定Hash運算結(jié)果的 對應(yīng)地址處是否存在相應(yīng)數(shù)據(jù)的控制塊的地址信息,如果有則說明可能存在相 同數(shù)據(jù);如果不存在則說明一定沒有所刪除數(shù)據(jù),執(zhí)行步驟507:返回刪除成 功并結(jié)束。如果隊列已經(jīng)存在則遍歷隊列查看是否已經(jīng)存在要插入數(shù)據(jù)關(guān)鍵字 一致的數(shù)據(jù),如果不存在,執(zhí)行步驟507:返回刪除成功并結(jié)束,存在相應(yīng)數(shù) 據(jù)時執(zhí)行步驟504。
      步驟504:判斷該數(shù)據(jù)是否已經(jīng)在SQ隊列中,如果已經(jīng)存在則執(zhí)行步驟 507,返回刪除成功并結(jié)束,否則執(zhí)行步驟505。
      步驟505:將該數(shù)據(jù)加入SQ隊列中。
      步驟506:向調(diào)用磁盤操作接口向磁盤操作模塊發(fā)送數(shù)據(jù)同步消息,將該 數(shù)據(jù)同步到物理磁盤上,執(zhí)行步驟507。
      步驟507:發(fā)送成功后則返回刪除成功并結(jié)束。
      圖6為本發(fā)明容量監(jiān)控的操作流程圖,如圖6所示,本發(fā)明容量監(jiān)控的操 作流程包括以下步驟
      步驟601:讀取內(nèi)存表信息控制塊中的數(shù)據(jù),獲糾目關(guān)內(nèi)存表信息. 步驟602:計算內(nèi)存表的FQ空閑率- (表容量_ HCQ隊列記錄數(shù))/表容量。
      步驟603:判斷當前內(nèi)存容量是否低于配置的低水平位容量。如果該空閑 率低于配置的低水平位容量,則執(zhí)行604步驟;否則執(zhí)行步驟605。
      步驟604:調(diào)用FQ隊列回收操作接口,從SQ隊首開始回收內(nèi)存空間,直到FQ空閑率滿足高水平位容量位置或者SQ隊列被清空為止,然后執(zhí)行步驟 605。
      步驟605:從控制塊區(qū)的首部開始循環(huán)掃描每一個控制塊,如果控制塊處 于使用中并且不在SQ隊列,則對該控制塊計數(shù)累加(該計數(shù)在每次對應(yīng)數(shù)據(jù) 查詢的時候被清零)。
      步驟606:判斷當前計數(shù)值是否超過某個預先設(shè)定的閾值,如果超過,則 執(zhí)行步驟607,否則返回步驟605。
      步驟607:調(diào)用操作接口將過期數(shù)據(jù)從HCQ隊列中回收到FQ隊列。該數(shù) 據(jù)很長時間都沒有被操作完畢,確認由于某種異常導致出現(xiàn)了過期數(shù)據(jù),調(diào)用 操作接口將過期數(shù)據(jù)從HCQ隊列中回收到FQ隊列,然后執(zhí)行步驟607。
      步驟608:判斷掃描是否結(jié)束,如果結(jié)束則執(zhí)行步驟609返回成功退出, 否則繼續(xù)轉(zhuǎn)到步驟605。
      609:返回成功退出.
      本發(fā)明查詢內(nèi)存數(shù)據(jù)和刪除內(nèi)存數(shù)據(jù)的方法,使得熱點數(shù)據(jù)從SQ隊列中 刪除和加入SQ隊列尾部的操作,實現(xiàn)了熱點數(shù)據(jù)的篩選并被保持在內(nèi)存中。 由此,本發(fā)明提供了 一種具有動態(tài)篩選并保持熱點數(shù)據(jù)功能的內(nèi)存數(shù)據(jù)存儲的 實現(xiàn)方法,對內(nèi)存空間受到限制或者不足夠大的應(yīng)用,盡可能將最經(jīng)常被訪問 的熱點數(shù)據(jù)篩選出來并將其保留在內(nèi)存中,最大可能的利用了內(nèi)存操作速度高 于磁盤操作的特點,提高了系統(tǒng)的數(shù)據(jù)處理性能,并保證了內(nèi)存數(shù)據(jù)存儲裝置 的穩(wěn)定可用性與健壯性。
      圖7本發(fā)明內(nèi)存存儲數(shù)據(jù)的維護裝置的組成結(jié)構(gòu)示意圖,如圖7所示,本 發(fā)明內(nèi)存存儲數(shù)據(jù)的維護裝置包括設(shè)置模塊70、 HCQ管理模塊71、 SQ管理模 塊72、 FQ管理模塊73、數(shù)據(jù)維護模塊74和內(nèi)存表管理模塊75,其中,設(shè)置 模塊70用于將內(nèi)存區(qū)設(shè)置為內(nèi)存數(shù)據(jù)單元、控制塊和HE表的存儲模式,以及, 設(shè)置HCQ、 FQ和SQ;其中,每個數(shù)據(jù)存儲于一個內(nèi)存數(shù)據(jù)單元中,每個內(nèi)存 數(shù)據(jù)單元對應(yīng)于一個控制塊,所述控制塊記錄有存儲所述數(shù)據(jù)的所述內(nèi)存數(shù)據(jù) 單元的地址信息、所述數(shù)據(jù)的關(guān)鍵字以及所述數(shù)據(jù)所屬隊列的信息;所述HE表按所述數(shù)據(jù)的關(guān)鍵字信息的哈希運算值確定存儲所述數(shù)據(jù)的控制塊的首地址
      信息,哈希運算值相同的兩個以上的數(shù)據(jù)的控制塊通過指針關(guān)聯(lián),在所述HE 表中的所述數(shù)據(jù)的關(guān)鍵字的哈希運算值對應(yīng)的地址中存儲關(guān)聯(lián)控制塊的首地址 信息;所述FQ包括尚未存儲數(shù)據(jù)的內(nèi)存數(shù)據(jù)單元的信息;所述SQ包括從所述 HCQ刪除的數(shù)據(jù)隊列的信息,所述SQ中的數(shù)據(jù)被同步到內(nèi)存外部的存儲區(qū); 所述HCQ包括哈希運算值相同的兩個以上的數(shù)據(jù)以及當前被調(diào)用的數(shù)據(jù);所 述數(shù)據(jù)通過控制塊中的所述數(shù)據(jù)所屬隊列的信息與所述HCQ及SQ關(guān)聯(lián);HCQ 管理模塊71用于對HCQ中的隊列進行維護,通過各HCQ隊列的記錄鏈分別 存放同一哈希值的記錄,并關(guān)聯(lián)到HE上;SQ管理模塊72用于對SQ中的隊 列進行維護,在數(shù)據(jù)從HCQ中刪除時,將被刪除的內(nèi)存數(shù)據(jù)單元掛接到SQ中 隊列尾部,通過數(shù)據(jù)在SQ中隊列移出和加入操作按調(diào)用熱度對數(shù)據(jù)進行排序; FQ管理模塊73用于對FQ中的隊列進行維護,用于管理空閑內(nèi)存數(shù)據(jù)單元的 分配和回收;數(shù)據(jù)維護模塊74用于對內(nèi)存中的內(nèi)存數(shù)據(jù)單元進行維護,實現(xiàn)對 數(shù)據(jù)的插入、刪除、修 文操作;內(nèi)存表管理模塊75用于管理所有內(nèi)存表的信息, 維護內(nèi)存信息控制塊中的數(shù)據(jù)。
      數(shù)據(jù)維護模塊74新增數(shù)據(jù)時,將所述數(shù)據(jù)存儲于所述FQ中的一個內(nèi)存數(shù) 據(jù)單元中,并修 文存儲所述數(shù)據(jù)的內(nèi)存數(shù)據(jù)單元的控制塊記載所述數(shù)據(jù)的關(guān) 鍵字并修改所述數(shù)據(jù)所屬隊列的信息,觸發(fā)所述HCQ管理模塊將存儲新增數(shù) 據(jù)的內(nèi)存數(shù)據(jù)單元與所述HCQ關(guān)聯(lián)且置于所述HCQ的最尾端;對所述數(shù)據(jù)的 關(guān)鍵字進行哈希運算得到哈希運算值,判斷所述哈希運算值在所述HE表中的 對應(yīng)地址中是否已存儲有控制塊的首地址,若有,則不再存儲該數(shù)據(jù)的控制塊 的首地址,否則存儲該數(shù)據(jù)的控制塊的首地址。
      如圖7所示,本發(fā)明內(nèi)存存儲數(shù)據(jù)的維護裝置還包括容量監(jiān)控模塊76,用 于對當前的內(nèi)存容量進行監(jiān)控,當前內(nèi)存容量低于設(shè)定閾值時,觸發(fā)所述數(shù)據(jù) 維護模塊刪除所述SQ的內(nèi)存數(shù)據(jù)單元中的數(shù)據(jù),修改所刪除數(shù)據(jù)的內(nèi)存數(shù)據(jù) 單元的控制塊中的所述數(shù)據(jù)所屬隊列的信息,所述FQ管理模塊將所刪除數(shù)據(jù) 的內(nèi)存數(shù)據(jù)單元與所述FQ關(guān)聯(lián)。如圖7所示,本發(fā)明內(nèi)存存儲數(shù)據(jù)的維護裝置還包括查找模塊77,用于查 找數(shù)據(jù),對所述數(shù)據(jù)的關(guān)鍵字進行哈希運算得到哈希運算值,根據(jù)所述哈希運 算值在所述HE表中的對應(yīng)地址處所存儲的控制塊的首地址信息,并進一步查 找出首地址對應(yīng)的控制塊,若所查找出的首地址對應(yīng)的控制塊為一個,則該控 制塊即為所述數(shù)據(jù)的控制塊,該控制塊中所指示的內(nèi)存數(shù)據(jù)單元中的數(shù)據(jù)即為 所查找的所述數(shù)據(jù);若所查找出的首地址對應(yīng)的控制塊為兩個以上,則4姿控制 塊中指針信息遍歷每個控制塊,查找與所述數(shù)據(jù)的關(guān)鍵字匹配的控制塊,該控 制塊中所指示的內(nèi)存數(shù)據(jù)單元中的數(shù)據(jù)即為所查找的所述數(shù)據(jù)。
      本領(lǐng)域技術(shù)人員應(yīng)當理解,本發(fā)明圖7所示的內(nèi)存存儲數(shù)據(jù)的維護裝置是 為實現(xiàn)前述的內(nèi)存存儲數(shù)據(jù)的維護方法而設(shè)計的,圖7所示裝置中的各處理單 元的實現(xiàn)功能可參照圖1至圖6所示的方法中的相關(guān)描述而理解,各單元的功 能可通過運行于處理器上的程序而實現(xiàn),也可通過相應(yīng)的邏輯電路而實現(xiàn)。
      以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。
      權(quán)利要求
      1、一種內(nèi)存存儲數(shù)據(jù)的維護方法,其特征在于,包括將內(nèi)存區(qū)設(shè)置為內(nèi)存數(shù)據(jù)單元、控制塊和哈希入口HE表的存儲模式,并設(shè)置哈希沖突隊列HCQ、空閑隊列FQ和同步隊列SQ;以及在將所述HCQ中數(shù)據(jù)刪除時,將所刪除的數(shù)據(jù)添入所述SQ中,并在HE表中保持所刪除的數(shù)據(jù)的關(guān)鍵字的哈希運算值;新增數(shù)據(jù)時,從所述FQ中選擇空內(nèi)存數(shù)據(jù)單元存儲所述新增數(shù)據(jù),并將存儲所述新增數(shù)據(jù)內(nèi)存數(shù)據(jù)單元對應(yīng)的控制塊置入所述HE表中待添加數(shù)據(jù)的關(guān)鍵字的哈希運算值所對應(yīng)的控制塊列表中。
      2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,將內(nèi)存區(qū)設(shè)置為內(nèi)存數(shù)據(jù)單 元、控制塊和哈希入口 HE表的存儲模式,并設(shè)置哈希沖突隊列HCQ、空閑隊 列FQ和同步隊列SQ,包括將每個數(shù)據(jù)存儲于一個內(nèi)存數(shù)據(jù)單元中,為每個內(nèi)存數(shù)據(jù)單元對應(yīng)設(shè)置一 個控制塊,所述控制塊記錄有存儲所述數(shù)據(jù)的所述內(nèi)存數(shù)據(jù)單元的地址信息、 所述數(shù)據(jù)的關(guān)鍵字以及所述數(shù)據(jù)所屬隊列的信息;所述HE表按所述數(shù)據(jù)的關(guān) 鍵字信息的哈希運算值確定存儲所述數(shù)據(jù)的控制塊的首地址信息,哈希運算值 相同的兩個以上的數(shù)據(jù)的控制塊通過指針關(guān)聯(lián),在所述HE表中的所述數(shù)據(jù)的 關(guān)鍵字的哈希運算值對應(yīng)的地址中存儲關(guān)聯(lián)控制塊的首地址信息;所述FQ包 括尚未存儲數(shù)據(jù)的內(nèi)存數(shù)據(jù)單元的信息;所述SQ包括從所述HCQ刪除的數(shù)據(jù) 隊列的信息,所述SQ中的數(shù)據(jù)被同步到內(nèi)存外部的存儲區(qū);所述HCQ包括哈 希運算值相同的兩個以上的數(shù)據(jù)以及當前被調(diào)用的數(shù)據(jù);所述數(shù)據(jù)通過控制塊 中的所述數(shù)據(jù)所屬隊列的信息與所述HCQ及SQ關(guān)聯(lián)。
      3、 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述SQ中的數(shù)據(jù)按調(diào) 用熱度由低到高的順序進行排序,調(diào)用熱度最高的數(shù)據(jù)位于所述SQ的最尾端; 從所述HCQ中刪除的數(shù)據(jù),修改刪除數(shù)據(jù)的控制塊中的所屬隊列的信息,與 所述SQ關(guān)聯(lián),且位于所述SQ的最尾端。
      4、 根據(jù)權(quán)利要求3所述的方法,其特征在于,刪除所述SQ的內(nèi)存數(shù)據(jù)單 元中數(shù)據(jù)時,由首地址處的數(shù)據(jù)開始刪除。
      5、 根椐權(quán)利要求1或2所述的方法,其特征在于,所述方法還包括 對當前的內(nèi)存容量進行監(jiān)控,當前內(nèi)存容量低于設(shè)定閾值時,刪除所述SQ的內(nèi)存數(shù)據(jù)單元中的數(shù)據(jù),修改所刪除數(shù)據(jù)的內(nèi)存數(shù)據(jù)單元的控制塊中的所述 數(shù)據(jù)所屬隊列的^言息,與所述FQ關(guān)聯(lián)。
      6、 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述方法還包括 查找數(shù)據(jù)時,對所述數(shù)據(jù)的關(guān)鍵字進行哈希運算得到哈希運算值,根據(jù)所述哈希運算值在所述HE表中的對應(yīng)地址處所存儲的控制塊的首地址信息,并 進一步查找出首地址對應(yīng)的控制塊,若所查找出的首地址對應(yīng)的控制塊為一個, 則該控制塊即為所述數(shù)據(jù)的控制塊,該控制塊中所指示的內(nèi)存數(shù)據(jù)單元中的數(shù) 據(jù)即為所查找的所述數(shù)據(jù);若所查找出的首地址對應(yīng)的控制塊為兩個以上,則 按控制塊中指針信息遍歷每個控制塊,查找與所述數(shù)據(jù)的關(guān)鍵字匹配的控制塊, 該控制塊中所指示的內(nèi)存數(shù)據(jù)單元中的數(shù)據(jù)即為所查找的所述數(shù)據(jù)。
      7、 根據(jù)權(quán)利要求l所述的方法,其特征在于,新增數(shù)據(jù)時,將所述數(shù)據(jù)存 儲于所述FQ中的一個內(nèi)存數(shù)據(jù)單元中,并修 文存儲所述數(shù)據(jù)的內(nèi)存數(shù)據(jù)單元 的控制塊記載所述數(shù)據(jù)的關(guān)鍵字并修改所述數(shù)據(jù)所屬隊列的信息,與所述 HCQ關(guān)聯(lián)且位于所述HCQ的最尾端;對所述數(shù)據(jù)的關(guān)鍵字進行哈希運算得到 哈希運算值,判斷所述哈希運算值在所述HE表中的對應(yīng)地址中是否已存儲有 控制塊的首地址,若有,則不再存儲該數(shù)據(jù)的控制塊的首地址,否則存儲該數(shù) 據(jù)的控制塊的首地址。
      8、 一種內(nèi)存存儲數(shù)據(jù)的維護裝置,其特征在于,包括設(shè)置模塊,用于將內(nèi)存區(qū)設(shè)置為內(nèi)存數(shù)據(jù)單元、控制塊和HE表的存儲模 式,并設(shè)置HCQ、 FQ和SQ;HCQ管理模塊,用于對HCQ中的隊列進行維護,通過隊列對應(yīng)數(shù)據(jù)存儲 的內(nèi)存數(shù)據(jù)單元對應(yīng)的控制塊M實現(xiàn)隊列的刪除及增加,并通過隊列對應(yīng)數(shù) 據(jù)的關(guān)鍵字的哈希值關(guān)聯(lián)到HE上;中的隊列進行維護,在數(shù)據(jù)從HCQ中刪除時, 將被刪除的內(nèi)存數(shù)據(jù)單元掛接到SQ中隊列尾部,通過數(shù)據(jù)在SQ中隊列移出和 加入操作按調(diào)用熱度對數(shù)據(jù)進行排序;以及FQ管理^^塊,用于對FQ中的隊列進行維護,用于管理空閑內(nèi)存數(shù)據(jù)單元 的分配和回收,新增數(shù)據(jù)時,根據(jù)新增數(shù)據(jù)的關(guān)鍵字的哈希值確定存儲新增數(shù) 據(jù)的內(nèi)存數(shù)據(jù)單元對應(yīng)的控制塊所應(yīng)關(guān)聯(lián)的HCQ中的控制塊鏈表,并關(guān)聯(lián)到 所述HCQ中的控制塊*上。
      9、 根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述裝置還包括 數(shù)據(jù)維護模塊,用于對內(nèi)存中的內(nèi)存數(shù)據(jù)單元進行維護,實現(xiàn)對數(shù)據(jù)的插入、刪除、修改操作;以及內(nèi)存表管理模塊,用于管理所有內(nèi)存表的信息,維護內(nèi)存信息控制塊中的 數(shù)據(jù)。
      10、 根據(jù)權(quán)利要求8或9所述的裝置,其特征在于,所述設(shè)置單元將內(nèi)存 區(qū)設(shè)置為內(nèi)存數(shù)據(jù)單元、控制塊和HE表的存儲模式,以及設(shè)置HCQ、 FQ和 SQ;其中,每個數(shù)據(jù)存儲于一個內(nèi)存數(shù)據(jù)單元中,每個內(nèi)存數(shù)據(jù)單元對應(yīng)于一 個控制塊,所述控制塊記錄有存儲所述數(shù)據(jù)的所述內(nèi)存數(shù)據(jù)單元的地址信息、 所述數(shù)據(jù)的關(guān)鍵字以及所述數(shù)據(jù)所屬隊列的信息;所述HE表按所述數(shù)據(jù)的關(guān) 鍵字信息的哈希運算值確定存儲所述數(shù)據(jù)的控制塊的首地址信息,哈希運算值 相同的兩個以上的數(shù)據(jù)的控制塊通過指針關(guān)聯(lián),在所述HE表中的所述數(shù)據(jù)的 關(guān)鍵字的哈希運算值對應(yīng)的地址中存儲關(guān)聯(lián)控制塊的首地址信息;所述FQ包 括尚未存儲數(shù)據(jù)的內(nèi)存數(shù)據(jù)單元的信息;所述SQ包括從所述HCQ刪除的數(shù)據(jù) 隊列的信息,所述SQ中的數(shù)據(jù)被同步到內(nèi)存外部的存儲區(qū);所述HCQ包括p合 希運算值相同的兩個以上的數(shù)據(jù)以及當前被調(diào)用的數(shù)據(jù);所述數(shù)據(jù)通過控制塊 中的所述數(shù)據(jù)所屬隊列的信息與所述HCQ及SQ關(guān)聯(lián)。
      全文摘要
      本發(fā)明公開了一種內(nèi)存存儲數(shù)據(jù)的維護方法,包括將內(nèi)存區(qū)設(shè)置為內(nèi)存數(shù)據(jù)單元、控制塊和哈希入口HE表的存儲模式,并設(shè)置哈希沖突隊列HCQ、空閑隊列FQ和同步隊列SQ;在將所述HCQ中數(shù)據(jù)刪除時,將所刪除的數(shù)據(jù)添入所述SQ中,并在HE表中保持所刪除的數(shù)據(jù)的關(guān)鍵字的哈希運算值;新增數(shù)據(jù)時,從所述FQ中選擇空內(nèi)存數(shù)據(jù)單元存儲所述新增數(shù)據(jù),并將存儲所述新增數(shù)據(jù)內(nèi)存數(shù)據(jù)單元對應(yīng)的控制塊置入所述HE表中待添加數(shù)據(jù)的關(guān)鍵字的哈希運算值所對應(yīng)的控制塊列表中。本發(fā)明同時公開了一種內(nèi)存存儲數(shù)據(jù)的維護裝置。本發(fā)明提高了數(shù)據(jù)在內(nèi)存中的命中率,對數(shù)據(jù)的操作盡量在內(nèi)存中完成,減少了不必要的輸入輸出操作,能大幅度提高系統(tǒng)處理數(shù)據(jù)的效率。
      文檔編號G06F17/30GK101620618SQ200910089849
      公開日2010年1月6日 申請日期2009年7月24日 優(yōu)先權(quán)日2009年7月24日
      發(fā)明者侯春華, 聶榮初, 剛 邢, 陶長標 申請人:中興通訊股份有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1