国产精品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>

      半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)方法及存儲(chǔ)系統(tǒng)的制作方法

      文檔序號(hào):6385494閱讀:740來(lái)源:國(guó)知局
      專利名稱:半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)方法及存儲(chǔ)系統(tǒng)的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù),尤其涉及一種半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)方法及存儲(chǔ)系統(tǒng)。
      背景技術(shù)
      隨著計(jì)算機(jī)網(wǎng)絡(luò)的飛速發(fā)展和信息技術(shù)的進(jìn)步,半結(jié)構(gòu)化數(shù)據(jù)呈現(xiàn)出日益繁榮的趨勢(shì)。由于半結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)是不固定、不完全或不規(guī)則的,形式是多樣化的。主要應(yīng)用于對(duì)存儲(chǔ)數(shù)據(jù)無(wú)嚴(yán)格模式限制的萬(wàn)維網(wǎng)以及電子郵件、電子商務(wù)、文獻(xiàn)檢索中。半結(jié)構(gòu)化數(shù)據(jù)介于模式固定的結(jié)構(gòu)化數(shù)據(jù),例如,關(guān)系庫(kù)中的表/元組和對(duì)象庫(kù)中的類型/對(duì)象,與完全沒(méi)有模式的無(wú)序數(shù)據(jù),例如,正文、聲音、圖像之間。半結(jié)構(gòu)化數(shù)據(jù)的存取方式較為簡(jiǎn)單,使用開(kāi)源、高性能的鍵/值(Key/Value)的Redis存儲(chǔ)方式,鍵/值可根據(jù)實(shí)際需要進(jìn)行擴(kuò)充。大多數(shù)的Key/Value數(shù)據(jù),隨著時(shí)間推移,較少被訪問(wèn),只是作為存檔數(shù)據(jù),成為冷數(shù)據(jù)。研究表明,實(shí)際數(shù)據(jù)的訪問(wèn)一般都符合齊普夫(Zipf)分布,大約有90%的Key/Value數(shù)據(jù)是冷數(shù)據(jù),存儲(chǔ)后再也沒(méi)有被訪問(wèn)過(guò),6.5%的Key/Value數(shù)據(jù)是偏冷數(shù)據(jù),只是偶爾被訪問(wèn),只有約3.5 %的Key/Value數(shù)據(jù)是偏熱數(shù)據(jù),經(jīng)常被訪問(wèn)。在很多應(yīng)用場(chǎng)景,對(duì)于被經(jīng)常訪問(wèn)的偏熱數(shù)據(jù),半結(jié)構(gòu)化的Key/Value數(shù)據(jù)擁有超大的訪問(wèn)量,并且要求較低的響應(yīng)時(shí)間。但現(xiàn)有半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)方法,訪問(wèn)量較少的數(shù)據(jù)也必須存儲(chǔ)于內(nèi)存中,從而浪費(fèi)了大量的內(nèi)存,資源利用率較低,查詢響應(yīng)速度較慢;同時(shí),Redis使用單進(jìn)程單線程的方式,在使用Redis時(shí),為了最大限度的發(fā)揮Redis的性能,需要通過(guò)多個(gè)實(shí)例來(lái)提高性能,而多實(shí)例的方式增加了運(yùn)維的復(fù)雜度和成本。

      發(fā)明內(nèi)容
      本發(fā)明的實(shí)施例提供一種半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)方法,提高資源利用率、提升查詢響應(yīng)速度。本發(fā)明的實(shí)施例還提供一種半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)系統(tǒng),提高資源利用率、提升查詢響應(yīng)速度。為達(dá)到上述目的,本發(fā)明實(shí)施例提供的一種半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)方法,包括:關(guān)系型數(shù)據(jù)庫(kù)插件接收用戶的數(shù)據(jù)查詢請(qǐng)求,調(diào)用關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎查詢內(nèi)存,所述內(nèi)存通過(guò)所述關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎采用最近最少使用隊(duì)列維護(hù)數(shù)據(jù),將預(yù)定時(shí)間內(nèi)未被使用的數(shù)據(jù)從內(nèi)存中逐出,存放在外部的固態(tài)硬盤中;關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎判斷內(nèi)存中是否存儲(chǔ)有數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù);如果有,將查詢得到的數(shù)據(jù)攜帶在數(shù)據(jù)查詢請(qǐng)求結(jié)果中進(jìn)行輸出;如果未存儲(chǔ)有,從外部的固態(tài)硬盤中進(jìn)行查詢,通過(guò)外部的固態(tài)硬盤查詢,獲取數(shù)據(jù)查詢請(qǐng)求結(jié)果進(jìn)行輸出。其中,所述關(guān)系型數(shù)據(jù)庫(kù)插件包括應(yīng)用層模塊和MySQL服務(wù)層模塊,所述應(yīng)用層模塊包括:業(yè)務(wù)邏輯單元以及服務(wù)訪問(wèn)客戶端單元,其中,服務(wù)訪問(wèn)客戶端單元包括:MySQL客戶端子單元以及Handlersocket客戶端子單元,所述MySQL服務(wù)層模塊包括:監(jiān)聽(tīng)程序單元、SQL語(yǔ)句解析層單元、服務(wù)器端的接口單元以及Handlersocket插件單元,所述關(guān)系型數(shù)據(jù)庫(kù)插件接收用戶的數(shù)據(jù)查詢請(qǐng)求,調(diào)用關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎包括:業(yè)務(wù)邏輯單元接收用戶的數(shù)據(jù)查詢請(qǐng)求,如果確定進(jìn)行MySQL查詢,將數(shù)據(jù)查詢請(qǐng)求通過(guò)MySQL客戶端子單元輸出至監(jiān)聽(tīng)程序單元,如果確定進(jìn)行Handlersocket查詢,將數(shù)據(jù)查詢請(qǐng)求通過(guò)Handlersocket客戶端子單元輸出至Handlersocket插件單元;監(jiān)聽(tīng)程序單元監(jiān)聽(tīng)MySQL客戶端子單元的請(qǐng)求,將接收的數(shù)據(jù)查詢請(qǐng)求轉(zhuǎn)發(fā)給SQL語(yǔ)句解析層單元;SQL語(yǔ)句解析層單元接收數(shù)據(jù)查詢請(qǐng)求,調(diào)用服務(wù)器端的接口單元,在內(nèi)存中進(jìn)行數(shù)據(jù)查詢;Handlersocket插件單元接收數(shù)據(jù)查詢請(qǐng)求,調(diào)用服務(wù)器端的接口單元,在內(nèi)存中進(jìn)行數(shù)據(jù)查詢。其中,所述方法進(jìn)一步包括:將數(shù)據(jù)查詢請(qǐng)求結(jié)果中攜帶的數(shù)據(jù)從固態(tài)硬盤中寫入內(nèi)存。一種半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)系統(tǒng),該系統(tǒng)包括:關(guān)系型數(shù)據(jù)庫(kù)插件、關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎以及固態(tài)硬盤,其中,關(guān)系型數(shù)據(jù)庫(kù)插件,用于接收用戶的數(shù)據(jù)查詢請(qǐng)求,調(diào)用關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎以使關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎訪問(wèn)數(shù)據(jù);通過(guò)關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎接收數(shù)據(jù)查詢請(qǐng)求結(jié)果,進(jìn)行輸出;關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎,用于在內(nèi)存中維護(hù)最近最少使用隊(duì)列,將預(yù)定時(shí)間內(nèi)未被使用的數(shù)據(jù)從內(nèi)存中逐出,存放在底層的固態(tài)硬盤中;接收數(shù)據(jù)查詢請(qǐng)求,查詢內(nèi)存,如果存儲(chǔ)有數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),將查詢得到的數(shù)據(jù)攜帶在數(shù)據(jù)查詢請(qǐng)求結(jié)果中,輸出至關(guān)系型數(shù)據(jù)庫(kù)插件;如果未存儲(chǔ)有數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),將數(shù)據(jù)查詢請(qǐng)求輸出至固態(tài)硬盤,接收固態(tài)硬盤輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至關(guān)系型數(shù)據(jù)庫(kù)插件;固態(tài)硬盤,用于接收數(shù)據(jù)查詢請(qǐng)求,進(jìn)行查詢,獲取數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),將查詢得到的數(shù)據(jù)攜帶在數(shù)據(jù)查詢請(qǐng)求結(jié)果中,輸出至關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎。較佳地,在接收固態(tài)硬盤輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果之后,所述關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎進(jìn)一步用于將數(shù)據(jù)查詢請(qǐng)求結(jié)果中攜帶的數(shù)據(jù)從固態(tài)硬盤中寫入內(nèi)存。較佳地,所述關(guān)系型數(shù)據(jù)庫(kù)插件為Handlersocket,關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎為MySQL存儲(chǔ)引擎,固態(tài)硬盤為Fusion-10。較佳地,所述Handlersocket包括應(yīng)用層模塊和MySQL服務(wù)層模塊,其中,應(yīng)用層模塊,用于接收用戶的數(shù)據(jù)查詢請(qǐng)求,輸出至MySQL服務(wù)層模塊;接收MySQL服務(wù)層模塊輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,進(jìn)行輸出;MySQL服務(wù)層模塊,用于根據(jù)接收的數(shù)據(jù)查詢請(qǐng)求,調(diào)用MySQL存儲(chǔ)引擎;接收MySQL存儲(chǔ)引擎輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至應(yīng)用層模塊。較佳地,所述應(yīng)用層模塊包括:業(yè)務(wù)邏輯單元以及服務(wù)訪問(wèn)客戶端單元,其中,月艮務(wù)訪問(wèn)客戶端單元包括:MySQL客戶端子單元以及Handlersocket客戶端子單元;業(yè)務(wù)邏輯單元,用于接收用戶的數(shù)據(jù)查詢請(qǐng)求,如果確定進(jìn)行MySQL查詢,將數(shù)據(jù)查詢請(qǐng)求輸出至MySQL客戶端子單元,如果確定進(jìn)行Handlersocket查詢,將數(shù)據(jù)查詢請(qǐng)求輸出至Handlersocket客戶端子單元;接收數(shù)據(jù)查詢請(qǐng)求結(jié)果,進(jìn)行輸出;MySQL客戶端子單元,用于與MySQL服務(wù)層模塊交互,獲取數(shù)據(jù)查詢請(qǐng)求結(jié)果,向業(yè)務(wù)邏輯單元輸出;Handlersocket客戶端子單元,用于與MySQL服務(wù)層模塊交互,獲取數(shù)據(jù)查詢請(qǐng)求結(jié)果,向業(yè)務(wù)邏輯單元輸出。較佳地,所述MySQL服務(wù)層模塊包括:監(jiān)聽(tīng)程序單元、SQL語(yǔ)句解析層單元、服務(wù)器端的接口單元以及Handlersocket插件單元,其中,監(jiān)聽(tīng)程序單元,用于監(jiān)聽(tīng)客戶端的請(qǐng)求,接收數(shù)據(jù)查詢請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)給SQL語(yǔ)句解析層單元;接收SQL語(yǔ)句解析層單元輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至MySQL客戶端子單元;SQL語(yǔ)句解析層單元,用于接收數(shù)據(jù)查詢請(qǐng)求,調(diào)用服務(wù)器端的接口單元進(jìn)行數(shù)據(jù)查詢;接收調(diào)用服務(wù)器端的接口單元輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至監(jiān)聽(tīng)程序單元;Handlersocket插件單元,用于接收數(shù)據(jù)查詢請(qǐng)求,調(diào)用服務(wù)器端的接口單元進(jìn)行數(shù)據(jù)查詢;接收調(diào)用服務(wù)器端的接口單元輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至Handlersocket客戶端子單兀;服務(wù)器端的接口單元,用于分別接收來(lái)自SQL語(yǔ)句解析層單元以及Handlersocket插件單元的數(shù)據(jù)查詢請(qǐng)求,調(diào)用MySQL存儲(chǔ)引擎的各接口,獲取數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至相應(yīng)的SQL語(yǔ)句解析層單元以及Handlersocket插件單元。較佳地,所述MySQL存儲(chǔ)引擎包括:隊(duì)列維護(hù)模塊、接口模塊、第一查詢處理模塊以及第二查詢處理模塊,其中,隊(duì)列維護(hù)模塊,用于在內(nèi)存中維護(hù)最近最少使用隊(duì)列,將預(yù)定時(shí)間內(nèi)未被使用的數(shù)據(jù)從內(nèi)存中逐出,存放在外部的固態(tài)硬盤中;接收第二查詢處理模塊輸出的維護(hù)信息,第二查詢處理模塊獲取的數(shù)據(jù)從外部的固態(tài)硬盤中寫入內(nèi)存;接口模塊,用于接收數(shù)據(jù)查詢請(qǐng)求,輸出至第一查詢處理模塊;接收來(lái)自第一查詢處理模塊以及第二查詢處理模塊的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至服務(wù)器端的接口單元;第一查詢處理模塊,用于接收數(shù)據(jù)查詢請(qǐng)求,查詢內(nèi)存,如果存儲(chǔ)有數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),將查詢得到的數(shù)據(jù)攜帶在數(shù)據(jù)查詢請(qǐng)求結(jié)果中,輸出至接口模塊;如果未存儲(chǔ)有數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),將數(shù)據(jù)查詢請(qǐng)求輸出至第二查詢處理模塊;第二查詢處理模塊,用于接收數(shù)據(jù)查詢請(qǐng)求,輸出至固態(tài)硬盤,接收固態(tài)硬盤輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至接口模塊;判斷數(shù)據(jù)查詢請(qǐng)求結(jié)果中是否包含有數(shù)據(jù),如果有,向隊(duì)列維護(hù)模塊輸出維護(hù)信息。由上述技術(shù)方案可見(jiàn),本發(fā)明實(shí)施例提供的一種半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)方法及存儲(chǔ)系統(tǒng),關(guān)系型數(shù)據(jù)庫(kù)插件接收用戶的數(shù)據(jù)查詢請(qǐng)求,調(diào)用關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎查詢內(nèi)存,所述內(nèi)存通過(guò)所述關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎采用最近最少使用隊(duì)列維護(hù)數(shù)據(jù),將預(yù)定時(shí)間內(nèi)未被使用的數(shù)據(jù)從內(nèi)存中逐出,存放在外部的固態(tài)硬盤中;關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎判斷內(nèi)存中是否存儲(chǔ)有數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù);如果有,將查詢得到的數(shù)據(jù)攜帶在數(shù)據(jù)查詢請(qǐng)求結(jié)果中進(jìn)行輸出,如果未存儲(chǔ)有,從外部的固態(tài)硬盤中進(jìn)行查詢;通過(guò)外部的固態(tài)硬盤查詢,獲取數(shù)據(jù)查詢請(qǐng)求結(jié)果進(jìn)行輸出。這樣,關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎采用LRU List對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行維護(hù),將預(yù)定時(shí)間內(nèi)未被使用的數(shù)據(jù)從內(nèi)存中讀出至底層低速的固態(tài)硬盤中,以減少內(nèi)存的占用量,從而節(jié)省內(nèi)存容量,降低內(nèi)存中存儲(chǔ)的數(shù)據(jù)量,從而縮短查詢所需的時(shí)間,提高內(nèi)存資源的資源利用率以及查詢響應(yīng)速度。


      為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,以下將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹。顯而易見(jiàn)地,以下描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員而言,還可以根據(jù)這些附圖所示實(shí)施例得到其它的實(shí)施例及其附圖。圖1為本發(fā)明實(shí)施例涉及的計(jì)算機(jī)的硬件結(jié)構(gòu)示意圖。圖2為本發(fā)明實(shí)施例Handlersocket軟件結(jié)構(gòu)示意圖。圖3為本發(fā)明實(shí)施例的半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)系統(tǒng)結(jié)構(gòu)示意圖。圖4為本發(fā)明實(shí)施例的半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)方法流程示意圖。
      具體實(shí)施例方式以下將結(jié)合附圖對(duì)本發(fā)明各實(shí)施例的技術(shù)方案進(jìn)行清楚、完整的描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明的一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)的前提下所得到的所有其它實(shí)施例,都屬于本發(fā)明所保護(hù)的范圍?,F(xiàn)有半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)方法,使用Redis存儲(chǔ)Key/Value數(shù)據(jù),Key/Value數(shù)據(jù)全部存儲(chǔ)在內(nèi)存中,使得訪問(wèn)量較少的數(shù)據(jù)也必須存在于內(nèi)存中,無(wú)法將冷數(shù)據(jù)采用一定的替換策略,例如,最近最少使用(LRU,Least Recently Used)算法,從內(nèi)存中換出到低速的硬件中以減少內(nèi)存的占用量,從而浪費(fèi)了大量的內(nèi)存,資源利用率較低,并導(dǎo)致查詢所需的時(shí)間較長(zhǎng)。外部部件互連總線接口(PC1-E,Peripheral Component InterconnectExpress)是電腦總線PCI的一種,它沿用了現(xiàn)有的PCI編程概念及通訊標(biāo)準(zhǔn),但基于更快的串行通信系統(tǒng),采用點(diǎn)對(duì)點(diǎn)串行連接,每個(gè)設(shè)備都有自己的專用連接,不需要向整個(gè)總線請(qǐng)求帶寬,而且可以將數(shù)據(jù)傳輸率提高到較高的頻率,達(dá)到PCI所不能提供的高帶寬。PC1-E應(yīng)用于內(nèi)部互連,由于PC1-E基于現(xiàn)有的PCI系統(tǒng),只需通過(guò)修改物理層而無(wú)須修改軟件,就可將現(xiàn)有PCI系統(tǒng)轉(zhuǎn)換為PC1-E系統(tǒng),并通過(guò)PC1-E控制器與所有外部設(shè)備進(jìn)行交互,從而擁有更快的速率,并可替換現(xiàn)有的內(nèi)部總線,例如,現(xiàn)有的加速圖形端口(AGP, Accelerated GraphicPorts)和 PCI。HandlerSocket是關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(MySQL)的一個(gè)插件,用于跳過(guò)MySQL的SQL層面,直接訪問(wèn)內(nèi)部的InnoDB存儲(chǔ)引擎。也就是說(shuō),通過(guò)監(jiān)聽(tīng)MySQL以外的兩個(gè)新的端口,來(lái)處理外部的請(qǐng)求。HandlerSocket完全采用新的協(xié)議進(jìn)行通訊,內(nèi)部將請(qǐng)求進(jìn)行解析,調(diào)用MySQL存儲(chǔ)引擎提供的接口來(lái)訪問(wèn)數(shù)據(jù)。HandlerSocket 米用 epoll()和 worker-thread/thread-pooling 架構(gòu),為輕量級(jí)的連接,支持索引查詢(主鍵索引和非主鍵的普通索引均可)。關(guān)于PC1-E以及HandlerSocket的詳細(xì)描述,具體可參見(jiàn)相關(guān)技術(shù)文獻(xiàn),在此不再贅述。
      本發(fā)明實(shí)施例中,使用高速的PC1-E設(shè)備,例如,固態(tài)硬盤Fusion-1O和開(kāi)源MySQL插件HandlerSocket,用于存儲(chǔ)半結(jié)構(gòu)化的Key/Value數(shù)據(jù),高速的PC1-E設(shè)備Fusion-1O直接插在PC1-E插槽中,提供了較低的延遲和較大的吞吐,可以提升數(shù)據(jù)傳輸速率,開(kāi)源MySQL插件HandlerSocket可將冷數(shù)據(jù)采用預(yù)先設(shè)置的替換策略,從內(nèi)存中換出到低速的硬件中,從而提高資源利用率。圖1為本發(fā)明實(shí)施例涉及的計(jì)算機(jī)的硬件結(jié)構(gòu)示意圖。參見(jiàn)圖1,包括:CPU、南橋芯片、北橋芯片、Fusion-1O以及串行連接SCSI (SAS, SerialAttached SCSI),其中,F(xiàn)usion-1O與北橋芯片相連,SAS與南橋芯片相連,北橋芯片分別與南橋芯片以及CPU相連;北橋芯片中包括有PC1-E控制器,南橋芯片中包括有SAS/SATA控制器;Fusion-1O通過(guò)Fusion-ΙΟ卡,即Fusion-ΙΟ使用SSD推出的一款高速硬件,直接插在PC1-E控制器插槽中,提供了較低的延遲和較大的吞吐;PC1-E是一種總線和接口標(biāo)準(zhǔn),主要優(yōu)勢(shì)就是數(shù)據(jù)傳輸速率高,采用PCI_Ex8,數(shù)據(jù)傳輸速率可為2GB/s ;SAS與南橋芯片的數(shù)據(jù)傳輸速率可為300M/S。北橋芯片(North Bridge)是主板芯片組中起主導(dǎo)作用的組成部分,也稱為主橋(HostBridge)0南橋芯片(South Bridge)負(fù)責(zé)1/0總線之間的通信,例如,PCI總線、USB、LAN、高級(jí)技術(shù)配件(ΑΤΑ, Advanced TechnologyAttachmen)、串行高級(jí)技術(shù)配件(SATA,Serial Advanced TechnologyAttachment)、音頻控制器、鍵盤控制器、實(shí)時(shí)時(shí)鐘控制器、高級(jí)電源管理等,不同芯片組中,可能南橋芯片是一樣的,不同的只是北橋芯片。圖2為本發(fā)明實(shí)施例Handlersocket軟件結(jié)構(gòu)示意圖。參見(jiàn)圖2,包括應(yīng)用層(Client app)和 MySQL 月艮務(wù)層(mysqld),其中,應(yīng)用層用于獲取數(shù)據(jù),MySQL服務(wù)層用于提供數(shù)據(jù)訪問(wèn)服務(wù)。應(yīng)用層包括:業(yè)務(wù)邏輯(Application)以及服務(wù)訪問(wèn)客戶端,其中,服務(wù)訪問(wèn)客戶端包括:libmysql以及l(fā)ibhsclient,其中,Iibmysql 為 mysql 的客戶端軟件包,libhsclient 為 handlersocket 的客戶端軟件包。通過(guò)MySQL服務(wù)層,可以提供兩種路徑的數(shù)據(jù)服務(wù),由業(yè)務(wù)主動(dòng)進(jìn)行選擇,一種為現(xiàn)有的數(shù)據(jù)庫(kù)訪問(wèn)路徑,通過(guò)監(jiān)聽(tīng)程序(Listener for libmysql)監(jiān)聽(tīng)客戶端的請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)給SQL語(yǔ)句解析層(SQL Layer),然后,SQL語(yǔ)句解析層調(diào)用服務(wù)器端的接口(Handler Interface),服務(wù)器端的接口調(diào)用各個(gè)存儲(chǔ)引擎的接口提供數(shù)據(jù),例如,Innodb、MyISAM以及其他的存儲(chǔ)引擎。另一種數(shù)據(jù)庫(kù)訪問(wèn)路徑為Handlersocket的路徑,通過(guò)Handlersocket插件直接調(diào)用服務(wù)器端的接口,服務(wù)器端的接口調(diào)用各個(gè)存儲(chǔ)引擎的接口提供數(shù)據(jù),該數(shù)據(jù)訪問(wèn)路徑不需要經(jīng)過(guò)SQL語(yǔ)句解析層,因而,有效節(jié)約了時(shí)間。本發(fā)明實(shí)施例中,同時(shí)提供兩種途徑的數(shù)據(jù)服務(wù),但是主要使用handlersocket的途徑進(jìn)行訪問(wèn)。由于handlersocket只提供有限的訪問(wèn),例如,按照數(shù)據(jù)庫(kù)的主鍵進(jìn)行查詢,所以不需要進(jìn)行SQL語(yǔ)句的解析,從而提高了查詢的響應(yīng)時(shí)間以及響應(yīng)速度。本發(fā)明實(shí)施例中,Handlersocket以MySQL的插件的形式存在,直接通過(guò)HandlerInterface訪問(wèn)MySQL存儲(chǔ)引擎,避免了 SQL的解析提供和Redis —樣的高速低延遲訪問(wèn)。圖3為本發(fā)明實(shí)施例的半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)系統(tǒng)結(jié)構(gòu)示意圖。參見(jiàn)圖3,該系統(tǒng)包括:關(guān)系型數(shù)據(jù)庫(kù)插件、關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎以及固態(tài)硬盤,其中,關(guān)系型數(shù)據(jù)庫(kù)插件,用于接收用戶的數(shù)據(jù)查詢請(qǐng)求,調(diào)用關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎以使關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎訪問(wèn)數(shù)據(jù);通過(guò)關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎接收數(shù)據(jù)查詢請(qǐng)求結(jié)果,進(jìn)行輸出;關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎,用于在內(nèi)存中維護(hù)最近最少使用隊(duì)列(LRUList),將預(yù)定時(shí)間內(nèi)未被使用的數(shù)據(jù)從內(nèi)存中逐出,存放在底層的固態(tài)硬盤中;接收數(shù)據(jù)查詢請(qǐng)求,查詢內(nèi)存,如果存儲(chǔ)有數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),將查詢得到的數(shù)據(jù)攜帶在數(shù)據(jù)查詢請(qǐng)求結(jié)果中,輸出至關(guān)系型數(shù)據(jù)庫(kù)插件;如果未存儲(chǔ)有數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),將數(shù)據(jù)查詢請(qǐng)求輸出至固態(tài)硬盤,接收固態(tài)硬盤輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至關(guān)系型數(shù)據(jù)庫(kù)插件;本發(fā)明實(shí)施例中,關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎采用LRU List對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行維護(hù),將預(yù)定時(shí)間內(nèi)未被使用的數(shù)據(jù),即冷數(shù)據(jù),采用LRU算法替換策略,從內(nèi)存中逐出,存放在底層低速的硬件中,例如,存放在固態(tài)硬盤中以減少內(nèi)存的占用量,從而節(jié)省內(nèi)存容量,降低內(nèi)存中存儲(chǔ)的數(shù)據(jù)量,使之只存儲(chǔ)有訪問(wèn)量的數(shù)據(jù),縮短查詢所需的時(shí)間,提高內(nèi)存資源的資源利用率;當(dāng)數(shù)據(jù)的訪問(wèn)量超過(guò)預(yù)先設(shè)置的訪問(wèn)量閾值時(shí),再?gòu)牡讓哟鎯?chǔ)設(shè)備(固態(tài)硬盤)上將該數(shù)據(jù)讀取出來(lái),存放在內(nèi)存中,以有效減少后續(xù)訪問(wèn)過(guò)程中所需的時(shí)間。在接收固態(tài)硬盤輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果之后,關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎進(jìn)一步用于將數(shù)據(jù)查詢請(qǐng)求結(jié)果中攜帶的數(shù)據(jù)從固態(tài)硬盤中寫入內(nèi)存。固態(tài)硬盤,用于接收數(shù)據(jù)查詢請(qǐng)求,進(jìn)行查詢,獲取數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),將查詢得到的數(shù)據(jù)攜帶在數(shù)據(jù)查詢請(qǐng)求結(jié)果中,輸出至關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎。本發(fā)明實(shí)施例中,如果固態(tài)硬盤根據(jù)數(shù)據(jù)查詢請(qǐng)求進(jìn)行查詢,沒(méi)有獲取數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),則在數(shù)據(jù)查詢請(qǐng)求結(jié)果中,攜帶查詢失敗信息,輸出至關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎。本發(fā)明實(shí)施例中,較佳地,關(guān)系型數(shù)據(jù)庫(kù)插件為Handlersocket,關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎為MySQL存儲(chǔ)引擎,對(duì)應(yīng)于圖1中的CPU、南橋芯片、北橋芯片以及串行連接SCSI,固態(tài)硬盤為Fusion-ΙΟ或其它閃存(FLASH)硬件,對(duì)應(yīng)于圖1中的Fusion-1O。其中,Handlersocket調(diào)用MySQL存儲(chǔ)引擎接口訪問(wèn)數(shù)據(jù),MySQL存儲(chǔ)引擎將Fusion-10作為底層存儲(chǔ)設(shè)備,在內(nèi)存中維護(hù)最近最少使用隊(duì)列(LRUList),將最近未被使用的數(shù)據(jù)從內(nèi)存中逐出,存放在底層的存儲(chǔ)設(shè)備Fusion-ΙΟ上,當(dāng)數(shù)據(jù)需要訪問(wèn)時(shí),再?gòu)牡讓哟鎯?chǔ)設(shè)備上讀取出來(lái),存放在內(nèi)存中。本發(fā)明實(shí)施例中,Handlersocket包括應(yīng)用層(Client app)模塊和MySQL服務(wù)層(mysqld)模塊(圖中未示出),其中,應(yīng)用層模塊,用于接收用戶的數(shù)據(jù)查詢請(qǐng)求,輸出至MySQL服務(wù)層模塊;接收MySQL服務(wù)層模塊輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,進(jìn)行輸出;MySQL服務(wù)層模塊,用于根據(jù)接收的數(shù)據(jù)查詢請(qǐng)求,調(diào)用MySQL存儲(chǔ)引擎;接收MySQL存儲(chǔ)引擎輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至應(yīng)用層模塊。其中,應(yīng)用層模塊包括:業(yè)務(wù)邏輯(Application)單元以及服務(wù)訪問(wèn)客戶端單元,其中,服務(wù)訪問(wèn)客戶端單元包括:MySQL客戶端子單元(libmysql)以及Handlersocket客戶端子單元(libhsclient),即libmysql為MySQL的客戶端軟件包,libhsclient為Handlersocket的客戶端軟件包。
      業(yè)務(wù)邏輯(Application)單元,用于接收用戶的數(shù)據(jù)查詢請(qǐng)求,如果確定進(jìn)行MySQL查詢,將數(shù)據(jù)查詢請(qǐng)求輸出至MySQL客戶端子單元,如果確定進(jìn)行Handlersocket查詢,將數(shù)據(jù)查詢請(qǐng)求輸出至Handlersocket客戶端子單元;接收數(shù)據(jù)查詢請(qǐng)求結(jié)果,進(jìn)行輸出;本發(fā)明實(shí)施例中,MySQL服務(wù)層模塊可以提供兩種路徑的數(shù)據(jù)服務(wù),由業(yè)務(wù)在發(fā)起數(shù)據(jù)查詢請(qǐng)求時(shí)主動(dòng)進(jìn)行選擇。MySQL客戶端子單元,用于與MySQL服務(wù)層模塊交互,獲取數(shù)據(jù)查詢請(qǐng)求結(jié)果,向業(yè)務(wù)邏輯單元輸出;Handlersocket客戶端子單元,用于與MySQL服務(wù)層模塊交互,獲取數(shù)據(jù)查詢請(qǐng)求結(jié)果,向業(yè)務(wù)邏輯單元輸出。MySQL服務(wù)層模塊包括:監(jiān)聽(tīng)程序單元、SQL語(yǔ)句解析層單元、服務(wù)器端的接口單兀以及 Handlersocket 插件(Handlersocket Plugin)單兀,其中,監(jiān)聽(tīng)程序單元,用于監(jiān)聽(tīng)客戶端的請(qǐng)求,接收數(shù)據(jù)查詢請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)給SQL語(yǔ)句解析層單元;接收SQL語(yǔ)句解析層單元輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至MySQL客戶端子單元;SQL語(yǔ)句解析層單元,用于接收數(shù)據(jù)查詢請(qǐng)求,調(diào)用服務(wù)器端的接口單元進(jìn)行數(shù)據(jù)查詢;接收調(diào)用服務(wù)器端的接口單元輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至監(jiān)聽(tīng)程序單元;Handlersocket插件單元,用于接收數(shù)據(jù)查詢請(qǐng)求,調(diào)用服務(wù)器端的接口單元進(jìn)行數(shù)據(jù)查詢;接收調(diào)用服務(wù)器端的接口單元輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至Handlersocket客戶端子單兀;服務(wù)器端的接口單元,用于分別接收來(lái)自SQL語(yǔ)句解析層單元以及Handlersocket插件單元的數(shù)據(jù)查詢請(qǐng)求,調(diào)用MySQL存儲(chǔ)引擎的各接口,獲取數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至相應(yīng)的SQL語(yǔ)句解析層單元以及Handlersocket插件單元。本發(fā)明實(shí)施例中,服務(wù)器端的接口單元如果接收到SQL語(yǔ)句解析層單元的數(shù)據(jù)查詢請(qǐng)求,獲取數(shù)據(jù)查詢請(qǐng)求結(jié)果后,輸出至SQL語(yǔ)句解析層單元;如果接收到Handlersocket插件單元的數(shù)據(jù)查詢請(qǐng)求,獲取數(shù)據(jù)查詢請(qǐng)求結(jié)果后,輸出至Handlersocket 插件單兀。本發(fā)明實(shí)施例中,通過(guò)Handlersocket插件單元,可以通過(guò)各接口,直接與后端的MySQL存儲(chǔ)引擎進(jìn)行Key-value式的交互,無(wú)需進(jìn)行MySQL上層的結(jié)構(gòu)化查詢語(yǔ)言(SQL,Structured Query Language)解釋、打開(kāi)關(guān)閉表、倉(cāng)ij建查詢計(jì)劃等,節(jié)約了 CPU的開(kāi)銷。本發(fā)明實(shí)施例中,MySQL存儲(chǔ)引擎包括:隊(duì)列維護(hù)模塊、接口模塊、第一查詢處理模塊以及第二查詢處理模塊,其中,隊(duì)列維護(hù)模塊,用于在內(nèi)存中維護(hù)最近最少使用隊(duì)列,將預(yù)定時(shí)間內(nèi)未被使用的數(shù)據(jù)從內(nèi)存中逐出,存放在外部的固態(tài)硬盤中;接收第二查詢處理模塊輸出的維護(hù)信息,將第二查詢處理模塊獲取的數(shù)據(jù)從外部的固態(tài)硬盤中寫入內(nèi)存;接口模塊,用于接收數(shù)據(jù)查詢請(qǐng)求,輸出至第一查詢處理模塊;接收來(lái)自第一查詢處理模塊以及第二查詢處理模塊的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至服務(wù)器端的接口單元;第一查詢處理模塊,用于接收數(shù)據(jù)查詢請(qǐng)求,查詢內(nèi)存,如果存儲(chǔ)有數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),將查詢得到的數(shù)據(jù)攜帶在數(shù)據(jù)查詢請(qǐng)求結(jié)果中,輸出至接口模塊;如果未存儲(chǔ)有數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),將數(shù)據(jù)查詢請(qǐng)求輸出至第二查詢處理模塊;第二查詢處理模塊,用于接收數(shù)據(jù)查詢請(qǐng)求,輸出至固態(tài)硬盤,接收固態(tài)硬盤輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至接口模塊;判斷數(shù)據(jù)查詢請(qǐng)求結(jié)果中是否包含有數(shù)據(jù),如果有,向隊(duì)列維護(hù)模塊輸出維護(hù)信息。由上述可見(jiàn),本發(fā)明實(shí)施例的半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)系統(tǒng),HandlerSocket可以使用MySQL存儲(chǔ)引擎內(nèi)部的LRU算法,將不常訪問(wèn)的數(shù)據(jù)換出內(nèi)存,當(dāng)該數(shù)據(jù)重新訪問(wèn)之后,再將數(shù)據(jù)換入內(nèi)存中。這樣,可以在有限內(nèi)存的情況下,將熱點(diǎn)數(shù)據(jù)保存在內(nèi)存中,將非熱點(diǎn)數(shù)據(jù)換出內(nèi)存,保存在高速的Fusion-ΙΟ上,既滿足了較高的性能,同時(shí)又避免了內(nèi)存的浪費(fèi),提高了資源利用率、提升了查詢響應(yīng)速度;進(jìn)一步地,F(xiàn)usion-ΙΟ的價(jià)格相比內(nèi)存,更加廉價(jià),因此,通過(guò)混合使用Fusion-ΙΟ和內(nèi)存,達(dá)到簡(jiǎn)化系統(tǒng)復(fù)雜度,節(jié)省內(nèi)存消耗,可以在性能和價(jià)格上獲得更好的平衡,從而降低成本;而且,Handlersocket使用多線程的方式來(lái)進(jìn)行存取,也就是說(shuō),Handlersocket使用Epoll來(lái)處理客戶端的請(qǐng)求,Epoll是Linux內(nèi)核為處理大批量句柄而作了改進(jìn)的Poll,是Linux下多路復(fù)用IO接口 select/poll的增強(qiáng)版本,能顯著減少程序在大量并發(fā)連接中,且只有少量活躍的情況下的系統(tǒng)CPU利用率,因此,HandlerSocket使用單實(shí)例的方式,減少了實(shí)例數(shù),降低了運(yùn)維成本。圖4為本發(fā)明實(shí)施例的半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)方法流程示意圖。參見(jiàn)圖4,該流程包括:步驟401,關(guān)系型數(shù)據(jù)庫(kù)插件接收用戶的數(shù)據(jù)查詢請(qǐng)求,調(diào)用關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎查詢內(nèi)存,所述內(nèi)存通過(guò)所述關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎采用最近最少使用隊(duì)列維護(hù)數(shù)據(jù),將預(yù)定時(shí)間內(nèi)未被使用的數(shù)據(jù)從內(nèi)存中逐出,存放在外部的固態(tài)硬盤中;本步驟中,關(guān)系型數(shù)據(jù)庫(kù)插件包括應(yīng)用層模塊和MySQL服務(wù)層模塊,所述應(yīng)用層模塊包括:業(yè)務(wù)邏輯單元以及服務(wù)訪問(wèn)客戶端單元,其中,服務(wù)訪問(wèn)客戶端單元包括:MySQL客戶端子單元以及Handlersocket客戶端子單元,所述MySQL服務(wù)層模塊包括:監(jiān)聽(tīng)程序單元、SQL語(yǔ)句解析層單元、服務(wù)器端的接口單元以及Handlersocket插件單元,關(guān)系型數(shù)據(jù)庫(kù)插件接收用戶的數(shù)據(jù)查詢請(qǐng)求,調(diào)用關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎查詢內(nèi)存包括:業(yè)務(wù)邏輯單元接收用戶的數(shù)據(jù)查詢請(qǐng)求,如果確定進(jìn)行MySQL查詢,將數(shù)據(jù)查詢請(qǐng)求通過(guò)MySQL客戶端子單元輸出至監(jiān)聽(tīng)程序單元,如果確定進(jìn)行Handlersocket查詢,將數(shù)據(jù)查詢請(qǐng)求通過(guò)Handlersocket客戶端子單元輸出至Handlersocket插件單元;監(jiān)聽(tīng)程序單元監(jiān)聽(tīng)MySQL客戶端子單元的請(qǐng)求,將接收的數(shù)據(jù)查詢請(qǐng)求轉(zhuǎn)發(fā)給SQL語(yǔ)句解析層單元;SQL語(yǔ)句解析層單元接收數(shù)據(jù)查詢請(qǐng)求,調(diào)用服務(wù)器端的接口單元,在內(nèi)存中進(jìn)行數(shù)據(jù)查詢;Handlersocket插件單元接收數(shù)據(jù)查詢請(qǐng)求,調(diào)用服務(wù)器端的接口單元,在內(nèi)存中進(jìn)行數(shù)據(jù)查詢。步驟402,關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎判斷內(nèi)存中是否存儲(chǔ)有數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),如果有,執(zhí)行步驟403,否則,執(zhí)行步驟404 ;步驟403,將查詢得到的數(shù)據(jù)攜帶在數(shù)據(jù)查詢請(qǐng)求結(jié)果中進(jìn)行輸出;本步驟中,服務(wù)器端的接口單元分別接收來(lái)自SQL語(yǔ)句解析層單元以及Handlersocket插件單元的數(shù)據(jù)查詢請(qǐng)求,調(diào)用MySQL存儲(chǔ)引擎的各接口,首先從內(nèi)存中進(jìn)行查詢,如果內(nèi)存中沒(méi)有查詢到數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),再?gòu)腇usion-ΙΟ進(jìn)行查詢,獲取數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至相應(yīng)的SQL語(yǔ)句解析層單元以及Handlersocket插件單元。步驟404,從外部的固態(tài)硬盤中進(jìn)行查詢,通過(guò)外部的固態(tài)硬盤查詢,獲取數(shù)據(jù)查詢請(qǐng)求結(jié)果進(jìn)行輸出。本步驟中,固態(tài)硬盤可以采用Fusion-10, Fusion-ΙΟ的價(jià)格相比內(nèi)存,更加廉價(jià),用于存儲(chǔ)內(nèi)存中預(yù)定時(shí)間內(nèi)未被使用的數(shù)據(jù);同時(shí),在數(shù)據(jù)被使用后,又可以將數(shù)據(jù)寫入內(nèi)存中。實(shí)際應(yīng)用中,如果固態(tài)硬盤根據(jù)數(shù)據(jù)查詢請(qǐng)求進(jìn)行查詢,沒(méi)有獲取數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),則在數(shù)據(jù)查詢請(qǐng)求結(jié)果中,攜帶查詢失敗信息。較佳地,該方法在執(zhí)行步驟404后,可以進(jìn)一步包括:步驟405,將數(shù)據(jù)查詢請(qǐng)求結(jié)果中攜帶的數(shù)據(jù)從固態(tài)硬盤中寫入內(nèi)存。顯然,本領(lǐng)域技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若對(duì)本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也包含這些改動(dòng)和變型在內(nèi)。
      權(quán)利要求
      1.一種半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)方法,包括: 關(guān)系型數(shù)據(jù)庫(kù)插件接收用戶的數(shù)據(jù)查詢請(qǐng)求,調(diào)用關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎查詢內(nèi)存,所述內(nèi)存通過(guò)所述關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎采用最近最少使用隊(duì)列維護(hù)數(shù)據(jù),將預(yù)定時(shí)間內(nèi)未被使用的數(shù)據(jù)從內(nèi)存中逐出,存放在外部的固態(tài)硬盤中; 關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎判斷內(nèi)存中是否存儲(chǔ)有數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù); 如果有,將查詢得到的數(shù)據(jù)攜帶在數(shù)據(jù)查詢請(qǐng)求結(jié)果中進(jìn)行輸出;如果未存儲(chǔ)有,從外部的固態(tài)硬盤中進(jìn)行查詢,通過(guò)外部的固態(tài)硬盤查詢,獲取數(shù)據(jù)查詢請(qǐng)求結(jié)果進(jìn)行輸出。
      2.根據(jù)權(quán)利要求1所述的方法,其中,所述關(guān)系型數(shù)據(jù)庫(kù)插件包括應(yīng)用層模塊和MySQL服務(wù)層模塊,所述應(yīng)用層模塊包括:業(yè)務(wù)邏輯單元以及服務(wù)訪問(wèn)客戶端單元,其中,服務(wù)訪問(wèn)客戶端單元包括:MySQL客戶端子單元以及Handlersocket客戶端子單元,所述MySQL服務(wù)層模塊包括:監(jiān)聽(tīng)程序單元、SQL語(yǔ)句解析層單元、服務(wù)器端的接口單元以及Handlersocket插件單元,所述關(guān)系型數(shù)據(jù)庫(kù)插件接收用戶的數(shù)據(jù)查詢請(qǐng)求,調(diào)用關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎包括: 業(yè)務(wù)邏輯單元接收用戶的數(shù)據(jù)查詢請(qǐng)求,如果確定進(jìn)行MySQL查詢,將數(shù)據(jù)查詢請(qǐng)求通過(guò)MySQL客戶端子單元輸出至監(jiān)聽(tīng)程序單元,如果確定進(jìn)行Handlersocket查詢,將數(shù)據(jù)查詢請(qǐng)求通過(guò)Handlersocket客戶端子單元輸出至Handlersocket插件單元; 監(jiān)聽(tīng)程序單元監(jiān)聽(tīng)MySQL客戶端子單元的請(qǐng)求,將接收的數(shù)據(jù)查詢請(qǐng)求轉(zhuǎn)發(fā)給SQL語(yǔ)句解析層單元; SQL語(yǔ)句解析層單元接收 數(shù)據(jù)查詢請(qǐng)求,調(diào)用服務(wù)器端的接口單元,以在內(nèi)存中進(jìn)行數(shù)據(jù)查詢; Handlersocket插件單元接收數(shù)據(jù)查詢請(qǐng)求,調(diào)用服務(wù)器端的接口單元,以在內(nèi)存中進(jìn)行數(shù)據(jù)查詢。
      3.根據(jù)權(quán)利要求1或2所述的方法,其中,所述方法進(jìn)一步包括: 將數(shù)據(jù)查詢請(qǐng)求結(jié)果中攜帶的數(shù)據(jù)從固態(tài)硬盤中寫入內(nèi)存。
      4.一種半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)系統(tǒng),其特征在于,該系統(tǒng)包括:關(guān)系型數(shù)據(jù)庫(kù)插件、關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎以及固態(tài)硬盤,其中, 關(guān)系型數(shù)據(jù)庫(kù)插件,用于接收用戶的數(shù)據(jù)查詢請(qǐng)求,調(diào)用關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎以使關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎訪問(wèn)數(shù)據(jù);通過(guò)關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎接收數(shù)據(jù)查詢請(qǐng)求結(jié)果,進(jìn)行輸出; 關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎,用于在內(nèi)存中維護(hù)最近最少使用隊(duì)列,將預(yù)定時(shí)間內(nèi)未被使用的數(shù)據(jù)從內(nèi)存中逐出,存放在底層的固態(tài)硬盤中;接收數(shù)據(jù)查詢請(qǐng)求,查詢內(nèi)存,如果存儲(chǔ)有數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),將查詢得到的數(shù)據(jù)攜帶在數(shù)據(jù)查詢請(qǐng)求結(jié)果中,輸出至關(guān)系型數(shù)據(jù)庫(kù)插件;如果未存儲(chǔ)有數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),將數(shù)據(jù)查詢請(qǐng)求輸出至固態(tài)硬盤,接收固態(tài)硬盤輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至關(guān)系型數(shù)據(jù)庫(kù)插件; 固態(tài)硬盤,用于接收數(shù)據(jù)查詢請(qǐng)求,進(jìn)行查詢,獲取數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),將查詢得到的數(shù)據(jù)攜帶在數(shù)據(jù)查詢請(qǐng)求結(jié)果中,輸出至關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎。
      5.根據(jù)權(quán)利要求4所述的系統(tǒng),其特征在于,在接收固態(tài)硬盤輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果之后,所述關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎進(jìn)一步用于將數(shù)據(jù)查詢請(qǐng)求結(jié)果中攜帶的數(shù)據(jù)從固態(tài)硬盤中寫入內(nèi)存。
      6.根據(jù)權(quán)利要求5所述的系統(tǒng),其特征在于,所述關(guān)系型數(shù)據(jù)庫(kù)插件為Handlersocket,關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎為MySQL存儲(chǔ)引擎,固態(tài)硬盤為Fusion-10。
      7.根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,所述Handlersocket包括應(yīng)用層模塊和MySQL服務(wù)層模塊,其中, 應(yīng)用層模塊,用于接收用戶的數(shù)據(jù)查詢請(qǐng)求,輸出至MySQL服務(wù)層模塊;接收MySQL服務(wù)層模塊輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,進(jìn)行輸出; MySQL服務(wù)層模塊,用于根據(jù)接收的數(shù)據(jù)查詢請(qǐng)求,調(diào)用MySQL存儲(chǔ)引擎;接收MySQL存儲(chǔ)引擎輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至應(yīng)用層模塊。
      8.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述應(yīng)用層模塊包括:業(yè)務(wù)邏輯單元以及服務(wù)訪問(wèn)客戶端單元,其中,服務(wù)訪問(wèn)客戶端單元包括=MySQL客戶端子單元以及Handlersocket客戶端子單兀; 業(yè)務(wù)邏輯單元,用于接收用戶的數(shù)據(jù)查詢請(qǐng)求,如果確定進(jìn)行MySQL查詢,將數(shù)據(jù)查詢請(qǐng)求輸出至MySQL客戶端子單元,如果確定進(jìn)行Handlersocket查詢,將數(shù)據(jù)查詢請(qǐng)求輸出至Handlersocket客戶端子單元;接收數(shù)據(jù)查詢請(qǐng)求結(jié)果,進(jìn)行輸出; MySQL客戶端子單元,用于與MySQL服務(wù)層模塊交互,獲取MySQL服務(wù)層模塊輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,向業(yè)務(wù)邏輯單元輸出; Handlersocket客戶端子單元,用于與MySQL服務(wù)層模塊交互,獲取MySQL服務(wù)層模塊輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,向業(yè)務(wù)邏輯單元輸出。
      9.根據(jù)權(quán)利要求7或8所述的系統(tǒng),其特征在于,所述MySQL服務(wù)層模塊包括:監(jiān)聽(tīng)程序單元、SQL語(yǔ)句解析層單元、 服務(wù)器端的接口單元以及Handlersocket插件單元,其中, 監(jiān)聽(tīng)程序單元,用于監(jiān)聽(tīng)客戶端的請(qǐng)求,接收數(shù)據(jù)查詢請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)給SQL語(yǔ)句解析層單元;接收SQL語(yǔ)句解析層單元輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至MySQL客戶端子單元; SQL語(yǔ)句解析層單元,用于接收數(shù)據(jù)查詢請(qǐng)求,輸出至服務(wù)器端的接口單元以進(jìn)行數(shù)據(jù)查詢;接收調(diào)用服務(wù)器端的接口單元輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至監(jiān)聽(tīng)程序單元;Handlersocket插件單元,用于接收數(shù)據(jù)查詢請(qǐng)求,輸出至服務(wù)器端的接口單元以進(jìn)行數(shù)據(jù)查詢;接收調(diào)用服務(wù)器端的接口單元輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至Handlersocket客戶端子單兀; 服務(wù)器端的接口單元,用于分別接收來(lái)自SQL語(yǔ)句解析層單元以及Handlersocket插件單元的數(shù)據(jù)查詢請(qǐng)求,調(diào)用MySQL存儲(chǔ)引擎的各接口,獲取數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至相應(yīng)的SQL語(yǔ)句解析層單元以及Handlersocket插件單元。
      10.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述MySQL存儲(chǔ)引擎包括:隊(duì)列維護(hù)模塊、接口模塊、第一查詢處理模塊以及第二查詢處理模塊,其中, 隊(duì)列維護(hù)模塊,用于在內(nèi)存中維護(hù)最近最少使用隊(duì)列,將預(yù)定時(shí)間內(nèi)未被使用的數(shù)據(jù)從內(nèi)存中逐出,存放在外部的固態(tài)硬盤中;接收第二查詢處理模塊輸出的維護(hù)信息,將第二查詢處理模塊獲取的數(shù)據(jù)從外部的固態(tài)硬盤中寫入內(nèi)存; 接口模塊,用于接收數(shù)據(jù)查詢請(qǐng)求,輸出至第一查詢處理模塊;接收來(lái)自第一查詢處理模塊以及第二查詢處理模塊的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至服務(wù)器端的接口單元; 第一查詢處理模塊,用于接收數(shù)據(jù)查詢請(qǐng)求,查詢內(nèi)存,如果存儲(chǔ)有數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),將查詢得到的數(shù)據(jù)攜帶在數(shù)據(jù)查詢請(qǐng)求結(jié)果中,輸出至接口模塊;如果未存儲(chǔ)有數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù),將數(shù)據(jù)查詢請(qǐng)求輸出至第二查詢處理模塊; 第二查詢處理模塊,用于接收數(shù)據(jù)查詢請(qǐng)求,輸出至固態(tài)硬盤,接收固態(tài)硬盤輸出的數(shù)據(jù)查詢請(qǐng)求結(jié)果,輸出至接口模塊;判斷數(shù)據(jù)查詢請(qǐng)求結(jié)果中是否包含有數(shù)據(jù),如果有,向隊(duì)列維護(hù)模塊輸出維護(hù) 信息。
      全文摘要
      本發(fā)明公開(kāi)了一種半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)方法及存儲(chǔ)系統(tǒng)。該方法包括關(guān)系型數(shù)據(jù)庫(kù)插件接收用戶的數(shù)據(jù)查詢請(qǐng)求,調(diào)用關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎查詢內(nèi)存,所述內(nèi)存通過(guò)所述關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎用最近最少使用隊(duì)列維護(hù)數(shù)據(jù),將預(yù)定時(shí)間內(nèi)未被使用的數(shù)據(jù)從內(nèi)存中逐出,存放在外部的固態(tài)硬盤中;關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)引擎判斷內(nèi)存中是否存儲(chǔ)有數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù);如果有,將查詢得到的數(shù)據(jù)攜帶在數(shù)據(jù)查詢請(qǐng)求結(jié)果中進(jìn)行輸出;如果未存儲(chǔ)有,從外部的固態(tài)硬盤中進(jìn)行查詢,通過(guò)外部的固態(tài)硬盤查詢,獲取數(shù)據(jù)查詢請(qǐng)求結(jié)果進(jìn)行輸出。應(yīng)用本發(fā)明,可以提高資源利用率、提升查詢響應(yīng)速度。
      文檔編號(hào)G06F17/30GK103092920SQ201210574109
      公開(kāi)日2013年5月8日 申請(qǐng)日期2012年12月26日 優(yōu)先權(quán)日2012年12月26日
      發(fā)明者侯軍偉, 關(guān)啟盼, 楊海朝 申請(qǐng)人:新浪網(wǎng)技術(shù)(中國(guó))有限公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1