本發(fā)明涉及數(shù)據(jù)處理
技術(shù)領(lǐng)域:
:,特別是涉及一種海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法和系統(tǒng)。
背景技術(shù):
::隨著信息數(shù)據(jù)技術(shù)的高速發(fā)展,海量結(jié)構(gòu)化數(shù)據(jù)處理在數(shù)據(jù)處理
技術(shù)領(lǐng)域:
:中占據(jù)越來越重要的作用。傳統(tǒng)方案針對海量結(jié)構(gòu)化數(shù)據(jù)進(jìn)行存儲時(shí),通常采用以hadoop為基礎(chǔ)的大數(shù)據(jù)技術(shù),hadoop技術(shù)以hdfs(hadoop分布式文件系統(tǒng))和mapreduce技術(shù)為核心,提供了能夠?qū)A繑?shù)據(jù)進(jìn)行分布式處理的軟件框架,允許采用眾多廉價(jià)硬件設(shè)備構(gòu)建的用于存儲和計(jì)算的大型集群,實(shí)現(xiàn)對海量數(shù)據(jù)進(jìn)行可靠、高效、可伸縮的方式進(jìn)行處理,并衍生出了hbase、hive、pig、mahout、sqoop等一系列產(chǎn)品和工具。然而其需要熟練掌握相關(guān)技術(shù)的工程師進(jìn)行相應(yīng)海量數(shù)據(jù)的存儲處理工作,且將sql轉(zhuǎn)化為hiveql、udf、mapreduce的工作量巨大,這便導(dǎo)致傳統(tǒng)方案存儲海量結(jié)構(gòu)化數(shù)據(jù)的成本高。技術(shù)實(shí)現(xiàn)要素:基于此,有必要針對傳統(tǒng)方案存儲海量結(jié)構(gòu)化數(shù)據(jù)的成本高的技術(shù)問題,提供一種海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法和系統(tǒng)。一種海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法,包括如下步驟:將海量結(jié)構(gòu)化數(shù)據(jù)輸入關(guān)系型數(shù)據(jù)庫,將所述海量結(jié)構(gòu)化數(shù)據(jù)分配至所述關(guān)系型數(shù)據(jù)庫的各個(gè)工作節(jié)點(diǎn);通過所述關(guān)系型數(shù)據(jù)庫的主節(jié)點(diǎn)讀取各個(gè)工作節(jié)點(diǎn)的元數(shù)據(jù)分布規(guī)則,根據(jù)所述元數(shù)據(jù)分布規(guī)則生成各個(gè)工作節(jié)點(diǎn)的節(jié)點(diǎn)執(zhí)行計(jì)劃;將各個(gè)節(jié)點(diǎn)執(zhí)行計(jì)劃分別發(fā)送至相應(yīng)的工作節(jié)點(diǎn),控制各工作節(jié)點(diǎn)在運(yùn)行各自的執(zhí)行計(jì)劃,將所述海量結(jié)構(gòu)化數(shù)據(jù)存儲至關(guān)系型數(shù)據(jù)庫。一種海量結(jié)構(gòu)化數(shù)據(jù)的存儲系統(tǒng),包括:分配模塊,用于將海量結(jié)構(gòu)化數(shù)據(jù)輸入關(guān)系型數(shù)據(jù)庫,將所述海量結(jié)構(gòu)化數(shù)據(jù)分配至所述關(guān)系型數(shù)據(jù)庫的各個(gè)工作節(jié)點(diǎn);讀取模塊,用于通過所述關(guān)系型數(shù)據(jù)庫的主節(jié)點(diǎn)讀取各個(gè)工作節(jié)點(diǎn)的元數(shù)據(jù)分布規(guī)則,根據(jù)所述元數(shù)據(jù)分布規(guī)則生成各個(gè)工作節(jié)點(diǎn)的節(jié)點(diǎn)執(zhí)行計(jì)劃;存儲模塊,用于將各個(gè)節(jié)點(diǎn)執(zhí)行計(jì)劃分別發(fā)送至相應(yīng)的工作節(jié)點(diǎn),控制各工作節(jié)點(diǎn)在運(yùn)行各自的執(zhí)行計(jì)劃,將所述海量結(jié)構(gòu)化數(shù)據(jù)存儲至關(guān)系型數(shù)據(jù)庫。上述海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法和系統(tǒng),可以將海量結(jié)構(gòu)化數(shù)據(jù)輸入關(guān)系型數(shù)據(jù)庫,以分配至所述關(guān)系型數(shù)據(jù)庫的各個(gè)工作節(jié)點(diǎn),通過所述關(guān)系型數(shù)據(jù)庫的主節(jié)點(diǎn)讀取各個(gè)工作節(jié)點(diǎn)的元數(shù)據(jù)分布規(guī)則,根據(jù)所述元數(shù)據(jù)分布規(guī)則生成各個(gè)工作節(jié)點(diǎn)的節(jié)點(diǎn)執(zhí)行計(jì)劃,再將各個(gè)節(jié)點(diǎn)執(zhí)行計(jì)劃分別發(fā)送至相應(yīng)的工作節(jié)點(diǎn),控制各工作節(jié)點(diǎn)在運(yùn)行各自的執(zhí)行計(jì)劃,以將所述海量結(jié)構(gòu)化數(shù)據(jù)存儲至關(guān)系型數(shù)據(jù)庫,其中的數(shù)據(jù)處理過程簡單,對所操作用戶的技術(shù)要求相對低,且存儲海量結(jié)構(gòu)化數(shù)據(jù)過程中工作量得到有效減少,可以降低針對海量結(jié)構(gòu)化數(shù)據(jù)的存儲成本。一種計(jì)算機(jī)可讀存儲介質(zhì),其上存儲有計(jì)算機(jī)程序,該計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如上所述的海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法。上述計(jì)算機(jī)可讀存儲介質(zhì)上存儲的計(jì)算機(jī)程序,被處理器執(zhí)行時(shí)可以實(shí)現(xiàn)如上所述的海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法,能夠降低針對海量結(jié)構(gòu)化數(shù)據(jù)的存儲成本。一種計(jì)算機(jī)設(shè)備,包括存儲器、處理器及存儲在存儲器上并可在處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述程序時(shí)實(shí)現(xiàn)如上所述的海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法。上述計(jì)算機(jī)設(shè)備中,處理器執(zhí)行所述程序時(shí)可以實(shí)現(xiàn)如上所述的海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法,有效降低了存儲海量結(jié)構(gòu)化數(shù)據(jù)的成本。附圖說明圖1為一個(gè)實(shí)施例的海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法流程圖;圖2為一個(gè)實(shí)施例的關(guān)系型數(shù)據(jù)庫的結(jié)構(gòu)示意圖;圖3為一個(gè)實(shí)施例的海量結(jié)構(gòu)化數(shù)據(jù)的存儲系統(tǒng)結(jié)構(gòu)示意圖;圖4為一個(gè)實(shí)施例的計(jì)算機(jī)設(shè)備結(jié)構(gòu)示意圖。具體實(shí)施方式下面結(jié)合附圖對本發(fā)明的海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法和系統(tǒng)的具體實(shí)施方式作詳細(xì)描述。參考圖1,圖1所示為一個(gè)實(shí)施例的海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法流程圖,包括如下步驟:s10,將海量結(jié)構(gòu)化數(shù)據(jù)輸入關(guān)系型數(shù)據(jù)庫,將所述海量結(jié)構(gòu)化數(shù)據(jù)分配至所述關(guān)系型數(shù)據(jù)庫的各個(gè)工作節(jié)點(diǎn);上述關(guān)系型數(shù)據(jù)庫包括主節(jié)點(diǎn)(master節(jié)點(diǎn))和多個(gè)工作節(jié)點(diǎn)(worker節(jié)點(diǎn))。用戶可以向master節(jié)點(diǎn)輸入處理上述海量結(jié)構(gòu)化數(shù)據(jù)的結(jié)構(gòu)化查詢語句(如sql語句),上述結(jié)構(gòu)化查詢語句可記為sql_0,master節(jié)點(diǎn)中的語法解析器可以分析sql_0的語法結(jié)構(gòu),根據(jù)語法解析器獲得sql_0的操作命令,讀取master節(jié)點(diǎn)中待操作的元數(shù)據(jù)表信息。master節(jié)點(diǎn)維護(hù)一張表用于記錄各元數(shù)據(jù)表是如何分布存儲到各個(gè)節(jié)點(diǎn),是由存儲的分配規(guī)則決定的。在一個(gè)實(shí)施例中,將海量結(jié)構(gòu)化數(shù)據(jù)輸入關(guān)系型數(shù)據(jù)庫后,將海量結(jié)構(gòu)化數(shù)據(jù)分配至所述關(guān)系型數(shù)據(jù)庫的各個(gè)工作節(jié)點(diǎn)所對應(yīng)的分配規(guī)則可以包括兩類:一類是按順序分布存儲,另一類按表達(dá)式規(guī)則分布存儲:順序分布存儲指當(dāng)一個(gè)表在第一個(gè)worker節(jié)點(diǎn)(工作節(jié)點(diǎn))的記錄存儲一定數(shù)量后,后續(xù)的數(shù)據(jù)會存到下一點(diǎn)worker節(jié)點(diǎn)(工作節(jié)點(diǎn))。按表達(dá)式規(guī)則分布是指當(dāng)某個(gè)字段或幾個(gè)字段的值符合相應(yīng)的條件時(shí),存入指定的worker節(jié)點(diǎn)。master節(jié)點(diǎn)根據(jù)待操作表名,可以從元數(shù)據(jù)中取出該表(存儲輸入關(guān)系型數(shù)據(jù)庫的海量結(jié)構(gòu)化數(shù)據(jù)的表)的存儲分布規(guī)則。s20,通過所述關(guān)系型數(shù)據(jù)庫的主節(jié)點(diǎn)讀取各個(gè)工作節(jié)點(diǎn)的元數(shù)據(jù)分布規(guī)則,根據(jù)所述元數(shù)據(jù)分布規(guī)則生成各個(gè)工作節(jié)點(diǎn)的節(jié)點(diǎn)執(zhí)行計(jì)劃;上述步驟可以分別識別各個(gè)工作節(jié)點(diǎn)的節(jié)點(diǎn)id中的各個(gè)字段,將所識別的字段添加至上述sql_0的子條件,形成一個(gè)附加了所有工作節(jié)點(diǎn)分布規(guī)則的新的sql語句,將上述sql語句存入各個(gè)工作節(jié)點(diǎn)的sql表達(dá)式位置,以便生成各個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)執(zhí)行計(jì)劃。s30,將各個(gè)節(jié)點(diǎn)執(zhí)行計(jì)劃分別發(fā)送至相應(yīng)的工作節(jié)點(diǎn),控制各工作節(jié)點(diǎn)在運(yùn)行各自的執(zhí)行計(jì)劃,將所述海量結(jié)構(gòu)化數(shù)據(jù)存儲至關(guān)系型數(shù)據(jù)庫。上述步驟可以通過消息對列的方式將執(zhí)行計(jì)劃發(fā)送給各個(gè)工作節(jié)點(diǎn),各個(gè)工作節(jié)點(diǎn)可以解析執(zhí)行計(jì)劃,查找每個(gè)工作節(jié)點(diǎn)的節(jié)點(diǎn)id,將執(zhí)行計(jì)劃中的plan(節(jié)點(diǎn)執(zhí)行計(jì)劃)節(jié)點(diǎn)下對應(yīng)的一條數(shù)據(jù),以消息對列的方式,發(fā)送到對應(yīng)的工作節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)執(zhí)行計(jì)劃發(fā)送成功后,相應(yīng)的狀態(tài)可以標(biāo)記為1,表示發(fā)送成功。工作節(jié)點(diǎn)接收到節(jié)點(diǎn)執(zhí)行計(jì)劃中的對象plan的一條數(shù)據(jù),進(jìn)行解析,取出其它sql語句,連接到本地的關(guān)系型數(shù)據(jù)庫開始執(zhí)行,以事務(wù)方式進(jìn)行數(shù)據(jù)操作,以實(shí)現(xiàn)輸入關(guān)系型數(shù)據(jù)庫的海量結(jié)構(gòu)化數(shù)據(jù)的存儲。針對結(jié)構(gòu)化數(shù)據(jù)量過大的情況,本發(fā)明采用將一個(gè)表切割成多份分別存儲到多個(gè)worker節(jié)點(diǎn)的方式進(jìn)行,也允許一個(gè)表的數(shù)據(jù)在多個(gè)節(jié)點(diǎn)進(jìn)行存儲,可以避免出現(xiàn)在多個(gè)節(jié)點(diǎn)之間進(jìn)行多表關(guān)聯(lián)查詢的問題。本發(fā)明提供的海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法和系統(tǒng),可以將海量結(jié)構(gòu)化數(shù)據(jù)輸入關(guān)系型數(shù)據(jù)庫,以分配至所述關(guān)系型數(shù)據(jù)庫的各個(gè)工作節(jié)點(diǎn),通過所述關(guān)系型數(shù)據(jù)庫的主節(jié)點(diǎn)讀取各個(gè)工作節(jié)點(diǎn)的元數(shù)據(jù)分布規(guī)則,根據(jù)所述元數(shù)據(jù)分布規(guī)則生成各個(gè)工作節(jié)點(diǎn)的節(jié)點(diǎn)執(zhí)行計(jì)劃,再將各個(gè)節(jié)點(diǎn)執(zhí)行計(jì)劃分別發(fā)送至相應(yīng)的工作節(jié)點(diǎn),控制各工作節(jié)點(diǎn)在運(yùn)行各自的執(zhí)行計(jì)劃,以將所述海量結(jié)構(gòu)化數(shù)據(jù)存儲至關(guān)系型數(shù)據(jù)庫,其中的數(shù)據(jù)處理過程簡單,對所操作用戶的技術(shù)要求相對低,且存儲海量結(jié)構(gòu)化數(shù)據(jù)過程中工作量得到有效減少,可以降低針對海量結(jié)構(gòu)化數(shù)據(jù)的存儲成本。在一個(gè)實(shí)施例中,上述海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法,還可以包括:獲取各個(gè)工作節(jié)點(diǎn)運(yùn)行各自的執(zhí)行計(jì)劃時(shí)生成的執(zhí)行狀態(tài)信息,將所述執(zhí)行狀態(tài)信息發(fā)送至主節(jié)點(diǎn);通過所述主節(jié)點(diǎn)匯總各個(gè)工作節(jié)點(diǎn)的執(zhí)行狀態(tài)信息。具體地,worker節(jié)點(diǎn)端完成數(shù)據(jù)操作后,會生成執(zhí)行狀態(tài)信息runstate。上述runstate包括四部分:id:唯一標(biāo)記號。數(shù)值為開始執(zhí)行時(shí)間,格式為“yymmddhhmmss+4位毫秒數(shù)”,共16位數(shù)字。workerid:節(jié)點(diǎn)標(biāo)識(節(jié)點(diǎn)id)。標(biāo)明是哪個(gè)節(jié)點(diǎn)。state:完成狀態(tài)(狀態(tài)值)。0-成功,2-失敗。msg:狀態(tài)描述。如果成功,為空。如果失敗,則為失敗原因的詳細(xì)信息。各個(gè)worker節(jié)點(diǎn)可以以消息對列的方式將完成狀態(tài)(執(zhí)行狀態(tài)信息)發(fā)送給master節(jié)點(diǎn)端。作為一個(gè)實(shí)施例,上述通過所述主節(jié)點(diǎn)匯總并顯示各個(gè)工作節(jié)點(diǎn)的執(zhí)行狀態(tài)信息的過程可以包括:通過主節(jié)點(diǎn)收集各個(gè)工作節(jié)點(diǎn)的執(zhí)行狀態(tài)信息,識別各個(gè)執(zhí)行狀態(tài)信息的狀態(tài)值;若為失敗的狀態(tài)值大于或等于個(gè)數(shù)閾值,則向各個(gè)工作節(jié)點(diǎn)發(fā)送回滾消息,由各個(gè)工作節(jié)點(diǎn)執(zhí)行回滾事務(wù),取消數(shù)據(jù)更新操作;若各個(gè)狀態(tài)值均為成功,則向各個(gè)工作節(jié)點(diǎn)發(fā)送確認(rèn)消息,由各個(gè)工作節(jié)點(diǎn)提交事務(wù),再通過所述主節(jié)點(diǎn)匯總各個(gè)執(zhí)行狀態(tài)信息的狀態(tài)描述信息,將匯總后的狀態(tài)描述信息反饋至關(guān)系型數(shù)據(jù)庫用戶。master節(jié)點(diǎn)將匯總worker節(jié)點(diǎn)的執(zhí)行狀態(tài),結(jié)合事務(wù)處理,并將執(zhí)行結(jié)果通過顯示等方式發(fā)送給客戶端(反饋至關(guān)系型數(shù)據(jù)庫用戶)。具體地,master節(jié)點(diǎn)可以收集到所有工作節(jié)點(diǎn)的runstate,判斷state是否為0。如果出現(xiàn)某一個(gè)或幾個(gè)節(jié)點(diǎn)的state等于2,則向worker發(fā)送消息,由worker回滾事務(wù),取消數(shù)據(jù)更新操作;如果所有節(jié)點(diǎn)的state都是0,則向worker發(fā)送消息,由worker提交事務(wù)。然后master匯總runstate的msg,發(fā)送給客戶,完成所有操作。在一個(gè)實(shí)施例中,上述通過所述關(guān)系型數(shù)據(jù)庫的主節(jié)點(diǎn)讀取各個(gè)工作節(jié)點(diǎn)的元數(shù)據(jù)分布規(guī)則的過程可以包括:通過所述主節(jié)點(diǎn)讀取用戶輸入的結(jié)構(gòu)化查詢語句,根據(jù)所述結(jié)構(gòu)化查詢語句識別的操作命令,讀取主節(jié)點(diǎn)中待操作的元數(shù)據(jù)表信息;根據(jù)所述元數(shù)據(jù)表信息以及各個(gè)工作節(jié)點(diǎn)的數(shù)據(jù)存儲規(guī)則生成各個(gè)工作節(jié)點(diǎn)的元數(shù)據(jù)分布規(guī)則。用戶向master節(jié)點(diǎn)輸入的結(jié)構(gòu)化查詢語句(如sql語句),可以記為sql_0,master節(jié)點(diǎn)中的語法解析器分析sql_0的語法結(jié)構(gòu),根據(jù)語法解析器獲得其中的操作命令,讀取主節(jié)點(diǎn)中待操作的元數(shù)據(jù)表信息,master節(jié)點(diǎn)還可以維護(hù)一張表用于記錄各元數(shù)據(jù)表是如何分布存儲到各個(gè)節(jié)點(diǎn),讀取各個(gè)工作節(jié)點(diǎn)的數(shù)據(jù)存儲規(guī)則,以此生成各個(gè)工作節(jié)點(diǎn)的元數(shù)據(jù)分布規(guī)則。在一個(gè)實(shí)施例中,上述根據(jù)所述元數(shù)據(jù)分布規(guī)則生成各個(gè)工作節(jié)點(diǎn)的節(jié)點(diǎn)執(zhí)行計(jì)劃的過程可以包括:根據(jù)所述元數(shù)據(jù)分布規(guī)則生成附加各個(gè)節(jié)點(diǎn)分布規(guī)則的sql語句;將所述sql語句存入各個(gè)工作節(jié)點(diǎn)的sql表達(dá)式位置,生成各個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)執(zhí)行計(jì)劃。本實(shí)施例可以保證所生成的節(jié)點(diǎn)執(zhí)行計(jì)劃的準(zhǔn)確性。作為一個(gè)實(shí)施例,上述將所述sql語句存入各個(gè)工作節(jié)點(diǎn)的sql表達(dá)式位置,生成各個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)執(zhí)行計(jì)劃的過程之后,還可以包括:將各個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)執(zhí)行計(jì)劃添加至所述關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫執(zhí)行計(jì)劃;從各個(gè)元數(shù)據(jù)分布規(guī)則中識別表名節(jié)點(diǎn)值,將所述表名節(jié)點(diǎn)值存入數(shù)據(jù)庫執(zhí)行計(jì)劃。本實(shí)施例可以獲取信息更為完整的數(shù)據(jù)庫執(zhí)行計(jì)劃(最終的執(zhí)行計(jì)劃),便于用戶對相應(yīng)海量結(jié)構(gòu)化數(shù)據(jù)整體信息的獲取。作為一個(gè)實(shí)施例,上述根據(jù)所述元數(shù)據(jù)分布規(guī)則生成附加各個(gè)節(jié)點(diǎn)分布規(guī)則的sql語句的過程可以包括:從各個(gè)工作節(jié)點(diǎn)的元數(shù)據(jù)分布規(guī)則種取出節(jié)點(diǎn)id,填入該工作節(jié)點(diǎn)對應(yīng)的節(jié)點(diǎn)執(zhí)行計(jì)劃;取出各個(gè)工作節(jié)點(diǎn)的元數(shù)據(jù)分布規(guī)則中第一個(gè)字段的分布規(guī)則表達(dá)式,將所述分布規(guī)則表達(dá)式添加為sql子條件;將各個(gè)工作節(jié)點(diǎn)的所有字段的表達(dá)式都拼接到sql語句,形成附加各個(gè)節(jié)點(diǎn)分布規(guī)則的sql語句。本實(shí)施例生成的sql語句更為完整的包含了各個(gè)工作節(jié)點(diǎn)以及其所分配的海量結(jié)構(gòu)化數(shù)據(jù)的有關(guān)信息內(nèi)容。在一個(gè)實(shí)施例中,可以進(jìn)行如下變量定義:其中,定義變量json1為元數(shù)據(jù)的分布規(guī)則,該規(guī)則以json(javascriptobjectnotation)格式的字符串記錄。分布規(guī)則json1的json格式可以參考如下代碼(數(shù)據(jù)格式1):上述數(shù)據(jù)格式1中,各參數(shù)的含義如下:對象tablename:表名,其值用于標(biāo)識分布規(guī)則屬于該表名對應(yīng)的表;對象rule:由n條數(shù)據(jù)組成,每條數(shù)據(jù)表示一個(gè)工作節(jié)點(diǎn)的分布規(guī)則,其中包括對象nodeid和對象details;對象nodeid:其值為工作節(jié)點(diǎn)的id;對象details:其值記錄了分布規(guī)則詳細(xì)信息,用于說明字段的分布規(guī)則,其中,變量fileldname為表的字段名,expression為分布規(guī)則,用一個(gè)關(guān)系表達(dá)式來描述。上述關(guān)系型數(shù)據(jù)庫的結(jié)構(gòu)示意圖可以參考圖2所示。上述工作節(jié)點(diǎn)接收節(jié)點(diǎn)執(zhí)行計(jì)劃、解析節(jié)點(diǎn)執(zhí)行計(jì)劃,即定義變量plan_node表示某個(gè)工作節(jié)點(diǎn)的執(zhí)行計(jì)劃,其json格式可以如下(數(shù)據(jù)格式2):定義變量plan表示各個(gè)工作節(jié)的執(zhí)行計(jì)劃,其json格式可以如下(數(shù)據(jù)格式3):定義變量json2表示一個(gè)表最終的執(zhí)行計(jì)劃(數(shù)據(jù)庫執(zhí)行計(jì)劃),其json格式如下(數(shù)據(jù)格式4):上述根據(jù)所述元數(shù)據(jù)分布規(guī)則生成各個(gè)工作節(jié)點(diǎn)的節(jié)點(diǎn)執(zhí)行計(jì)劃以及表最終的執(zhí)行計(jì)劃(數(shù)據(jù)庫執(zhí)行計(jì)劃)的過程可以包括:a、從分布規(guī)則json1中取出第一個(gè)工作節(jié)點(diǎn)的id,即"nodeid":"node",并填入變量plan_node相應(yīng)位置。b、取出分布規(guī)則中第一個(gè)工作節(jié)點(diǎn)nodeid對應(yīng)的details中第一個(gè)字段fileldname的分布規(guī)則表達(dá)式expression,添加為sql_0的子條件。c、循環(huán)步驟b,直到將此工作節(jié)點(diǎn)nodeid的所有字段的表達(dá)式都拼接到sql_0之后,形成一個(gè)附加了所有分布規(guī)則的新的sql,記為sql_1。d、將步驟c形成的sql_1作為值,存入變量plan_node中對象"sql"的"sqlexpression"位置。e、將步驟d生成的變量plan_node作為對象存入plan數(shù)組。f、重復(fù)過程a至e,直到將分布規(guī)則中的所有工作節(jié)點(diǎn)的信息都處理完成。此時(shí),形成包括所有工作節(jié)點(diǎn)的變量plan的json數(shù)組。g、取出plan數(shù)組中的第n個(gè)元素,記為plan_node_1,取出plan數(shù)組中的第n+1個(gè)元素,記為plan_node_2,其中,初始值為n=1。h、令plan_node_2中對象"bak_data_sql"的值為plan_node_1中對象"sql"的值。i、n=n+1。j、重復(fù)步驟g至i,直到n=m-1,其中,m為plan數(shù)據(jù)中元素的個(gè)數(shù)(工作節(jié)點(diǎn)個(gè)數(shù))。k、令plan數(shù)組的第1個(gè)元素中"bak_data_sql"的值為plan數(shù)組中第m個(gè)元素的"sql"鍵的值。l、將步驟k處理后的plan對象為值,存入變量json2中的對象"plan"。m、從分布規(guī)則json1中取出表名節(jié)點(diǎn)(tablename節(jié)點(diǎn))的值,存入json2中。參考圖3所示,圖3為一個(gè)實(shí)施例的海量結(jié)構(gòu)化數(shù)據(jù)的存儲系統(tǒng)結(jié)構(gòu)示意圖,包括:分配模塊10,用于將海量結(jié)構(gòu)化數(shù)據(jù)輸入關(guān)系型數(shù)據(jù)庫,將所述海量結(jié)構(gòu)化數(shù)據(jù)分配至所述關(guān)系型數(shù)據(jù)庫的各個(gè)工作節(jié)點(diǎn);讀取模塊20,用于通過所述關(guān)系型數(shù)據(jù)庫的主節(jié)點(diǎn)讀取各個(gè)工作節(jié)點(diǎn)的元數(shù)據(jù)分布規(guī)則,根據(jù)所述元數(shù)據(jù)分布規(guī)則生成各個(gè)工作節(jié)點(diǎn)的節(jié)點(diǎn)執(zhí)行計(jì)劃;存儲模塊30,用于將各個(gè)節(jié)點(diǎn)執(zhí)行計(jì)劃分別發(fā)送至相應(yīng)的工作節(jié)點(diǎn),控制各工作節(jié)點(diǎn)在運(yùn)行各自的執(zhí)行計(jì)劃,將所述海量結(jié)構(gòu)化數(shù)據(jù)存儲至關(guān)系型數(shù)據(jù)庫。本發(fā)明提供的海量結(jié)構(gòu)化數(shù)據(jù)的存儲系統(tǒng)與本發(fā)明提供的海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法一一對應(yīng),在所述海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法的實(shí)施例闡述的技術(shù)特征及其有益效果均適用于海量結(jié)構(gòu)化數(shù)據(jù)的存儲系統(tǒng)的實(shí)施例中,特此聲明?;谌缟纤龅氖纠粋€(gè)實(shí)施例中還提供一種計(jì)算機(jī)可讀存儲介質(zhì),其上存儲有計(jì)算機(jī)程序,該計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如上所述的海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的計(jì)算機(jī)程序可存儲于一非易失性的計(jì)算機(jī)可讀取存儲介質(zhì)中,如本發(fā)明實(shí)施例中,該程序可存儲于計(jì)算機(jī)系統(tǒng)的存儲介質(zhì)中,并被該計(jì)算機(jī)系統(tǒng)中的至少一個(gè)處理器執(zhí)行,以實(shí)現(xiàn)包括如上述各方法的實(shí)施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(read-onlymemory,rom)或隨機(jī)存儲記憶體(randomaccessmemory,ram)等。基于如上所述的示例,參考圖4所示,本發(fā)明還提供一種計(jì)算機(jī)設(shè)備60,該計(jì)算機(jī)設(shè)備包括存儲器61、處理器62及存儲在存儲器62上并可在處理器61上運(yùn)行的計(jì)算機(jī)程序,所述處理器61執(zhí)行所述程序時(shí)實(shí)現(xiàn)如上述各實(shí)施例中的任意一種海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法。上述計(jì)算機(jī)設(shè)備60可以包括電腦等智能處理設(shè)備。本領(lǐng)域普通技術(shù)人員可以理解存儲器61存儲的計(jì)算機(jī)程序,與上述海量結(jié)構(gòu)化數(shù)據(jù)的存儲方法實(shí)施例中的描述相對應(yīng),處理器62還可用于執(zhí)行存儲器61所存儲的其他可執(zhí)行指令。以上所述實(shí)施例的各技術(shù)特征可以進(jìn)行任意的組合,為使描述簡潔,未對上述實(shí)施例中的各個(gè)技術(shù)特征所有可能的組合都進(jìn)行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認(rèn)為是本說明書記載的范圍。以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。當(dāng)前第1頁12當(dāng)前第1頁12