一種基于關系型數據庫的海量結構化數據的存儲方法【專利摘要】本發明公開了一種基于關系型數據庫的海量結構化數據的存儲方法,該方法包括:A、接收客戶端發送數據處理的SQL語句,分析其的語法結構;B、根據語法結構,讀取需操作表的元數據信息;C、根據元數據信息中的分布規則生成各工作節點的執行計劃;D、通過消息對列的方式將各執行計劃發送給各工作節點;E、通過消息對列的方式接收各工作節點的執行結果;F、將各工作節點的執行結果匯總,結合事務處理獲得事務執行結果,并將所述事務執行結果發送給客戶端。采用本技術方案在無需對原有RDBMS應用系統做大修改的前提下,提高大規模結構化數據處理的計算能力,滿足不斷增長的數據存儲和處理的需求。【專利說明】一種基于關系型數據庫的海量結構化數據的存儲方法【
技術領域:
】[0001]本發明涉及計算機【
技術領域:
】,尤其涉及一種基于關系型數據庫的海量結構化數據的存儲方法。【
背景技術:
】[0002]在現有技術中,對于海量結構化數據實現存儲與計算,主要有以下兩種方案:一、RDBMS(關系型數據庫管理系統)的網格計算技術;二、以Hadoop(分布式文件系統)為基礎的大數據技術。[0003]其中,RDBMS網格計算是把一個需要非常巨大的計算機能力才能解決的問題分成許多小的部分,然后把這些部分分配非許多計算機進行處理,最后把這些計算結果綜合起來得到最終結果。以Oracle數據庫為例,OracleRAC是Oracle數據庫支持網格計算環境的核心技術,OracleRAC全稱為RealApplicat1nCluster,即真正應用集群。RAC中所有服務器都可以直接訪問數據庫中的所有數據,其他數據庫在開放系統中都做不到這點,用戶可以非常方便地根據需求隨時增加服務器來擴充系統,無需重新分布數據和應用。RAC像一個單一的系統工作,任何節點的故障都不會影響其他節點對數據的訪問。[0004]而以分布式文件系統為基礎的大數據技術,采用分布式處理的軟件框架,允許采用多個廉價硬件設備構建大型集群,對海量數據進行處理。如Hive的一個數據倉庫工具,用來進行數據提取轉化加載(ETL)。Hive定義了簡單的類SQL查詢語言,允許熟悉SQL的用戶查詢數據,同也允許熟悉MapReduce開發者的開發自定義的mapper和reducer來處理內建的mapper和reducer無法完成的復雜的分析工作。Hive沒有專門的數據存儲格式,也沒有為數據建立索引,用戶可以自由的組織Hive中的表,對數據庫中的數據進行處理。[0005]但是,RDBMS的網格計算的應用系統在數據量出現海量增加時,無法滿足用戶要求。隨著數據的增大,硬件的擴展空間有限,數據增加到足夠大的數量級后,因為硬盤的輸入/輸出的瓶頸使得處理海量數據時效率非常低。而分布式文件系統的并行處理可以滿足不斷增加的數據存儲和處理,但是在對標準SQL的兼容性上存在差距,用戶可通過簡單SQL查詢數據,但復雜處理時需要用戶撰寫自定義函數來實現,因此對技術人員的要求比較高,而且將SQL轉化為MapReduce以解決復雜的數據處理,該工程量巨大,實際工作成本高。【
發明內容】[0006]為了解決上述技術問題,本發明實施例提出一種基于關系型數據庫的海量結構化數據的存儲方法,采用本技術方案在無需對原有RDBMS應用系統做大修改的前提下,提高大規模結構化數據處理的計算能力,滿足不斷增長的數據存儲和處理的需求。[0007]本發明實施例提供了一種基于關系型數據庫的海量結構化數據的存儲方法,包括:[0008]A、接收客戶端發送數據處理的SQL語句,分析所述SQL語句的語法結構;[0009]B、根據所述語法結構,讀取需操作表的元數據信息;[0010]C、根據所述元數據信息中的分布規則生成各工作節點的執行計劃;[0011]D、通過消息對列的方式將各執行計劃發送給各工作節點;[0012]E、通過消息對列的方式接收各工作節點的執行結果,其中,所述執行結果為工作節點在自身數據庫上執行其收到的執行計劃,將需存儲的數據存儲到關系型數據庫而獲得的結果;[0013]F、將各工作節點的執行結果匯總,結合事務處理獲得事務執行結果,并將所述事務執行結果發送給客戶端。[0014]進一步的,所述元數據信息包括:需操作表的類型、表名、備注信息、存儲所述需操作表的各工作節點信息以及所述各工作節點的分布規則。[0015]進一步的,所述步驟C具體為:[0016]Cl、獲取所述元數據信息中的各工作節點的分布規則;[0017]C2、提取某一工作節點中所有的分布規則表達式,創建此工作節點的SQL操作語句,依次將所述分布規則表達式拼接在所述SQL操作語句后面,獲得包含所有分布規則的SQL操作語句;[0018]C3、創建該工作節點的執行計劃,將所述包含所有分布規則的SQL操作語句存儲在所述工作節點的執行計劃中,并根據所述工作節點的節點名對該執行計劃進行命名;[0019]C4、重復C2至C3的步驟,直到將元數據信息中分布規則的所有工作節點都處理完成,獲得各工作節點的執行計劃;[0020]C5、創建需操作表的執行計劃,將各工作節點的執行計劃存入所述需操作表的執行計劃中,并采用所述元數據信息中的表名對所述需操作表的執行計劃進行命名。[0021]進一步的,所述步驟D具體為:解析各工作節點的執行計劃,獲取各工作節點的節點名,根據所述節點名,將各工作節點的執行計劃以消息對列的方式發送給各工作節點,并記錄各執行計劃的發送狀態。[0022]進一步的,所述執行結果包括:執行結果標識、工作節點標識、執行狀態以及狀態描述。[0023]進一步的,所述步驟F具體為:將各工作節點的執行結果中的執行狀態匯總,如果任一工作節點的執行狀態為執行失敗,則向各工作節點發送回滾消息,使各工作節點回滾事務,取消數據更新操作;如果各工作節點的執行狀態均為執行成功,則向各工作節點發送提交消息,使各工作節點提交事務,完成數據更新操作;[0024]在向各工作節點發送回滾消息或提交消息后,結合事務處理獲得事務執行結果,并將事務執行結果發送給用戶,所述事務執行結果包含各工作節點的執行結果中的狀態描述。[0025]由上可見,實施本發明實施例,具有如下有益效果:[0026]本發明實施例提供的海量結構化數據的存儲方法,客戶端的用戶采用標準的SQL語句對數據處理進行寫入,管理節點分析SQL語句的語法結構并讀取需操作表的元數據信息。根據元數據信息中的分布規則生成各工作節點的執行計劃,并通過消息對列的方式將各執行計劃發送給各工作節點,以供各工作節點進行數據處理和數據更新。各工作節點執行相應的執行計劃后,將執行結果反饋給管理節點,管理節點根據各執行結果,執行相應的事務操作處理,該事務操作處理為遞交或回滾,并將事務執行結果發送給客戶端。相比于現有技術RDMB無法滿足大規模增長的數據容量和處理以及Hive對操作人員需要高的問題,本發明僅需使用SQL語句即能實現數據的復雜處理,而且采用多工作節點進行存儲與處理,將一個事務操作拆分由多個工作節點進行處理和存儲。在無需對原有RDBMS應用系統做大修改的前提下,提高大規模結構化數據處理的計算能力,滿足不斷增長的數據存儲和處理的需求。[0027]進一步的,各工作節點將自身的執行結果反饋給管理節點,管理節點將各結果匯總,若任一工作節點執行失敗,則回滾事務,否則遞交并完成事務操作,保證了事務執行的完整性。【專利附圖】【附圖說明】[0028]圖1是本發明提供的一種基于關系型數據庫的海量結構化數據的存儲方法的流程不意圖;[0029]圖2是本發明提供的步驟C的可選流程示意圖;[0030]圖3為本發明提供的各器件之間的信息交互示意圖。【具體實施方式】[0031]下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。[0032]參見圖1,是本發明提供的一種基于關系型數據庫的海量結構化數據的存儲方法的流程示意圖,該方法包括以下步驟:[0033]步驟A:接收客戶端發送數據處理的SQL語句,分析所述SQL語句的語法結構。[0034]在本實施例中,用戶通過客戶端向管理節點發送SQL語句,實現對需操作數據的處理。管理節點在接收SQL語句后,語法解析器分析該SQL語句的語法結構。[0035]步驟B:根據該語法結構,讀取需操作表的元數據信息。[0036]在本實例中,針對結構化數據量過大的情況,采用將一個表切割成多分份存儲到多個Worker節點的方式進行,也允許一個表的數據在多個節點進行存儲,避免出現在多個節點之間進行多表關聯查詢的問題。而一張表記錄如何分布存儲到各個工作節點,是由存儲的分布規則決定的。分布規則有兩類,一類是按順序分布存儲,另一類按表達式規則分布存儲。[0037]其中,順序分布存儲是指當一個表在第一個工作節點的記錄存儲一定數量后,后續的數據會存到下一點工作節點。而按表達式規則分布是指當某個字段或幾個字段的值符合相應的條件時,存入指定的工作節點。[0038]在本實施例中,具體是根據分析獲得的語法結構,獲取需操作的表信息,再根據表信息,讀取相應的元數據信息。元數據信息包括:一個表的列類型、列的長度、表名、備注信息、存儲該表的各工作節點信息以及各工作節點的分布規則。[0039]步驟C:根據所述元數據信息中的分布規則生成各工作節點的執行計劃。[0040]在本實施例中,從元數據信息中取出存儲的分布規則,一個表的分布規則以一個JOSN格式(JavaScriptObjectNotat1n,—種輕量級的數據交換格式)的字符串記錄。[0041]參見圖2,圖2是本步驟的具體實施步驟,具體如下[0042]Cl、獲取所述元數據信息中的各工作節點的分布規則。[0043]C2、提取某一工作節點中所有的分布規則表達式,創建此工作節點的SQL操作語句,依次將該分布規則表達式拼接在該SQL操作語句后面,獲得包含所有分布規則的SQL操作語句。[0044]C3、創建該工作節點的執行計劃,將包含所有分布規則的SQL操作語句存儲在此工作節點的執行計劃中,并根據工作節點的節點名對該執行計劃進行命名。[0045]C4、重復C2至C3的步驟,直到將元數據信息中分布規則的所有工作節點都處理完成,獲得各工作節點的執行計劃;[0046]C5、創建需操作表的執行計劃,將各工作節點的執行計劃存入所述需操作表的執行計劃中,并采用所述元數據信息中的表名對所述需操作表的執行計劃進行命名。[0047]為了更好的描述步驟的實現方法,以下為本步驟的一個舉例。需操作表的分布規則由JOSN格式的字符串記錄,格式如下:[0048]{"tablcNamc":"tablcnamc","rule":[{"nodcid":"node","details"^jMficldNamc":"cxprcss1n!!|,!"ficldNamcM:"cxprcss1n,!!]},{!!nodcid":"node”,"detailsr,:[I,!ficldNamc":"cxprcss1n'!\,^'ficldNamc^^^Xprcss1n"!]}]}[0049]在上述格式中,tableName節點包含表名,即說明是哪個表的分布規則。rule節點由η條數據組成,每個數據表示一個工作節點的分布規則,包括nodeid節點和details節點。nodeid節點包含工作節點的標識。details節點包含分布規則詳細信息,其中,fileldName是表的字段名,express1n用一個關系表達式來描述,合起來說明字段的分布規則。[0050]為了方便描述,假設已建立下表中的各變量[0051]ID~[Hpi1jsonlJSON對象元數據定義的分布規則2plan—nodeJSON對象某個工作節點的執行計劃3^JSON對象數組~各個工作節點的執行計劃4json2JSON對象一個表最終的執行計劃[0052]本步驟的舉例具體如下:[0053]1、從分布規則jsonl中取出第一個工作節點(nodeid)信息,加入plan_node變量。[0054]2、取出分布規則中第一個工作節點中的第一個字段的分布規則表達式,作為客戶輸入的原始SQL的子條件,創建此工作節點的SQL操作語句。[0055]3、循環2過程,直到將此工作節點的所有字段的表達式都拼接到此工作節點的SQL操作語句后面,形成一個包含了所有分布規則的新的SQL操作語句。[0056]4、以〃SQL〃作為鍵名,過程3形成的SQL操作語句作為值,存入plan_node變量。[0057]5、將過程4生成的plan_node對象存入plan數組。[0058]6、重復2至5的過程,直到將分布規則中的所有工作節點的信息都處理完成。此時,形成包括所有工作節點的plan數組。[0059]7、取出plan數組中的第η(η=I)個元素作為plan_node_l,取出plan數組中的第n+1個兀素作為plan_node_2。[0060]8、將plan_node_l中〃sql〃鍵的值,存入plan_node_2中作為〃bak_data_sql"的值。[0061]9、重復7、8過程,直到n=m_l(m為plan數據中元素的個數)。[0062]10、將plan數組中第m個元素的〃sql"鍵的值,存入到plan數組中的第I個元素中作為〃bak_data_sql〃的值。[0063]11、以〃plan〃為鍵名,將處理后的plan對象為值存入json2。[0064]12、從分布規則jsonl中取出表名節點(tableName節點)的值存入json2中。[0065]經過上述步驟,形成了最終的執行計劃。最終執行計劃以一個JOSN格式的記錄,格式如下(數據格式2):[0066]{"tableName":"tablcnamc",Hplan":[{"nodeid":"node","scil'Vsqlexpress1n","bakdatasql":"sqlexpress1n"},{"nodeid":"node","sqr':"sqlexpress1n","bakdatasql":"sqlexpress1n"}]}[0067]步驟D:通過消息對列的方式將各執行計劃發送給各工作節點。[0068]在本實施例中,步驟D具體為:管理節點解析各工作節點的執行計劃,獲取各工作節點的節點名,根據該節點名,將各工作節點的執行計劃以消息對列的方式發送給各工作節點,并記錄各執行計劃的發送狀態。參照上述舉例,管理節點查找plan節點中的nodeid值,將執行計劃中的Plan節點下對應的一條數據,以消息對列的方式發送到對應的工作節點。每個工作節點發送成功后,狀態標記為I,表示發送成功。[0069]步驟E:通過消息對列的方式接收各工作節點的執行結果,其中,執行結果為工作節點在自身數據庫上執行其收到的執行計劃,將需存儲的數據存儲到關系型數據庫而獲得的結果。[0070]在本實施例中,參照上述舉例,工作節點在收到執行計劃中plan節點的一條數據,對其進行解析,取出SQL操作語句,連接到本地的關系型數據庫并開始執行,以事務方式進行數據操作。在工作節點完成數據操作后,會生成一個執行結果。該執行結果包括:執行結果標識、工作節點標識、執行狀態以及狀態描述。該執行結果標識為唯一標記號,數值為開始執行時間,格式為“yyMMddhhmmss+4位毫秒數”,共16位數字。該工作節點標識用于標明是哪個工作節點。該執行狀態為執行計劃的完成狀態,成功則狀態標記為O,失敗則狀態標記為2。該狀態描述包括空或失敗原因的詳細信息,如果執行成功,則為空,如果執行失敗,則為失敗原因的詳細信息。[0071]步驟F:將各工作節點的執行結果匯總,結合事務處理獲得事務執行結果,并將所述事務執行結果發送給客戶端。[0072]在管理節點收到所有工作節點的執行結果,判斷各執行結果是否執行成功,即判斷執行狀態是否為O。如果一個或多個工作節點的執行狀態標記為2,則向各工作節點發送回滾消息,使各工作節點回滾事務,取消數據更新操作。如果各工作節點的執行狀態標記均為0,則向各工作節點發送提交消息,使各工作節點提交事務,完成數據更新操作。[0073]在向各工作節點發送回滾消息或提交消息后,管理節點結合事務處理獲得事務執行結果,并將事務執行結果發送給用戶。該事務執行結果包含各工作節點的執行結果中的狀態描述,用于告知用戶該事務的執行情況。[0074]為了更好的說明本發明的整體實現過程,參見圖3,圖3為本發明提供的各器件之間的信息交互示意圖。其中,其主要包含客戶端、管理節點和多個工作節點。[0075]由上可見,本發明實施例提供的海量結構化數據的存儲方法,客戶端的用戶采用標準的SQL語句對數據處理進行寫入,管理節點分析SQL語句的語法結構并讀取需操作表的元數據信息。根據元數據信息中的分布規則生成各工作節點的執行計劃,并通過消息對列的方式將各執行計劃發送給各工作節點,以供各工作節點進行數據處理和數據更新。各工作節點執行相應的執行計劃后,將執行結果反饋給管理節點,管理節點根據各執行結果,執行相應的事務操作處理,該事務操作處理為遞交或回滾,并將事務執行結果發送給客戶端。相比于現有技術RDMB無法滿足大規模增長的數據容量和處理以及Hive對操作人員需要高的問題,本發明僅需使用SQL語句即能實現數據的復雜處理,而且采用多工作節點進行存儲與處理,將一個事務操作拆分由多個工作節點進行處理和存儲。在無需對原有RDBMS應用系統做大修改的前提下,提高大規模結構化數據處理的計算能力,滿足不斷增長的數據存儲和處理的需求。[0076]進一步的,各工作節點將自身的執行結果反饋給管理節點,管理節點將各結果匯總,若任一工作節點執行失敗,則回滾事務,否則遞交并完成事務操作,保證了事務執行的完整性。[0077]另外,本方法采用分布式存儲和計算,通過增加服務器的方式,適應不斷增長的數據存儲和處理的需要,完全滿足海量數據的性能要求,擴展性良好。同時,由于業務數據采用傳統的RDBMS進行存儲和處理,因此傳統的RDBMS的優勢仍然完全保留,對結構化的關系型數據的支持度較高,與原有的應用系統完全兼容,易用性良好。[0078]本領域普通技術人員可以理解實現上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質中,該程序在執行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質可為磁碟、光盤、只讀存儲記憶體(Read-OnlyMemory,ROM)或隨機存儲記憶體(RandomAccessMemory,RAM)等。[0079]以上所述是本發明的優選實施方式,應當指出,對于本【
技術領域:
】的普通技術人員來說,在不脫離本發明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也視為本發明的保護范圍。【權利要求】1.一種基于關系型數據庫的海量結構化數據的存儲方法,其特征在于,包括:A、接收客戶端發送數據處理的SQL語句,分析所述SQL語句的語法結構;B、根據所述語法結構,讀取需操作表的元數據信息;C、根據所述元數據信息中的分布規則生成各工作節點的執行計劃;D、通過消息對列的方式將各執行計劃發送給各工作節點;E、通過消息對列的方式接收各工作節點的執行結果,其中,所述執行結果為工作節點在自身數據庫上執行其收到的執行計劃,將需存儲的數據存儲到關系型數據庫而獲得的結果;F、將各工作節點的執行結果匯總,結合事務處理獲得事務執行結果,并將所述事務執行結果發送給客戶端。2.根據權利要求1所述的存儲方法,其特征在于,所述元數據信息包括:需操作表的類型、表名、備注信息、存儲所述需操作表的各工作節點信息以及所述各工作節點的分布規則。3.根據權利要求1或2所述的存儲方法,其特征在于,所述步驟C具體為:Cl、獲取所述元數據信息中的各工作節點的分布規則;C2、提取某一工作節點中所有的分布規則表達式,創建此工作節點的SQL操作語句,依次將所述分布規則表達式拼接在所述SQL操作語句后面,獲得包含所有分布規則的SQL操作語句;C3、創建該工作節點的執行計劃,將所述包含所有分布規則的SQL操作語句存儲在所述工作節點的執行計劃中,并根據所述工作節點的節點名對該執行計劃進行命名;C4、重復C2至C3的步驟,直到將元數據信息中分布規則的所有工作節點都處理完成,獲得各工作節點的執行計劃;C5、創建需操作表的執行計劃,將各工作節點的執行計劃存入所述需操作表的執行計劃中,并采用所述元數據信息中的表名對所述需操作表的執行計劃進行命名。4.根據權利要求1所述的存儲方法,其特征在于,所述步驟D具體為:解析各工作節點的執行計劃,獲取各工作節點的節點名,根據所述節點名,將各工作節點的執行計劃以消息對列的方式發送給各工作節點,并記錄各執行計劃的發送狀態。5.根據權利要求1所述的存儲方法,其特征在于,所述執行結果包括:執行結果標識、工作節點標識、執行狀態以及狀態描述。6.根據權利要求5所述的存儲方法,其特征在于,所述步驟F具體為:將各工作節點的執行結果中的執行狀態匯總,如果任一工作節點的執行狀態為執行失敗,則向各工作節點發送回滾消息,使各工作節點回滾事務,取消數據更新操作;如果各工作節點的執行狀態均為執行成功,則向各工作節點發送提交消息,使各工作節點提交事務,完成數據更新操作;在向各工作節點發送回滾消息或提交消息后,結合事務處理獲得事務執行結果,并將事務執行結果發送給用戶,所述事務執行結果包含各工作節點的執行結果中的狀態描述。【文檔編號】G06F17/30GK104133891SQ201410370692【公開日】2014年11月5日申請日期:2014年7月30日優先權日:2014年7月30日【發明者】李愛民,陳承志,龍慶麟,梁國輝,熊道勇申請人:廣州科騰信息技術有限公司