一種電力系統(tǒng)海量數(shù)據(jù)管理系統(tǒng)及其使用方法
【專利摘要】本發(fā)明涉及一種電力系統(tǒng)海量數(shù)據(jù)管理系統(tǒng)及其使用方法,所述系統(tǒng)包括仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)和海量仿真數(shù)據(jù)處理子系統(tǒng);所述仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)將數(shù)據(jù)分散存儲(chǔ)在多臺(tái)獨(dú)立的互聯(lián)設(shè)備上;所述仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)采用集群方式,其包含兩類節(jié)點(diǎn):元數(shù)據(jù)服務(wù)器master和文件服務(wù)器server;所述海量仿真數(shù)據(jù)處理子系統(tǒng)對(duì)數(shù)據(jù)通過切分規(guī)則將數(shù)據(jù)分布到不同的數(shù)據(jù)庫(kù)服務(wù)器上,通過路由規(guī)則路由訪問特定的數(shù)據(jù)庫(kù);所述海量仿真數(shù)據(jù)處理子系統(tǒng)包括數(shù)據(jù)訪問層,數(shù)據(jù)管理層和數(shù)據(jù)存儲(chǔ)層。所述方法包括仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)數(shù)據(jù)處理方法和海量仿真數(shù)據(jù)處理子系統(tǒng)處理方法。
【專利說明】一種電力系統(tǒng)海量數(shù)據(jù)管理系統(tǒng)及其使用方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種電力系統(tǒng)管理方法,具體講涉及一種電力系統(tǒng)海量數(shù)據(jù)管理系統(tǒng) 及其使用方法。
【背景技術(shù)】
[0002] 現(xiàn)階段的電力系統(tǒng)仿真計(jì)算分析數(shù)據(jù)的存儲(chǔ)模式依然嚴(yán)重依賴于數(shù)據(jù)庫(kù)存儲(chǔ)數(shù) 據(jù)的模式。而對(duì)大規(guī)模數(shù)據(jù)的處理,首先涉及到的是對(duì)數(shù)據(jù)的存儲(chǔ)。單機(jī)存儲(chǔ)不能滿足大 規(guī)模數(shù)據(jù)的存儲(chǔ)要求。傳統(tǒng)的網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)采用集中的存儲(chǔ)服務(wù)器存放所有數(shù)據(jù),存儲(chǔ)服 務(wù)器成為系統(tǒng)性能的瓶頸,制約了存儲(chǔ)系統(tǒng)可靠性和安全性的提高,不能滿足大規(guī)模存儲(chǔ) 應(yīng)用的需要。
[0003] 隨著目前一些地區(qū)電網(wǎng)的深入建設(shè),結(jié)構(gòu)化與非結(jié)構(gòu)化電網(wǎng)仿真數(shù)據(jù)的急劇膨 脹,原有的單機(jī)數(shù)據(jù)庫(kù)已無法滿足海量大規(guī)模電網(wǎng)仿真數(shù)據(jù)的存儲(chǔ)與處理需要,逐漸成為 數(shù)據(jù)存儲(chǔ)和訪問的瓶頸。大規(guī)模的集群數(shù)據(jù)庫(kù)的投運(yùn),雖然在一定程度上解決了存儲(chǔ)的平 滑擴(kuò)展,但是也給應(yīng)用帶來巨大的成本。為此,電力系統(tǒng)仿真計(jì)算分析急需改變海量仿真計(jì) 算數(shù)據(jù)的存儲(chǔ)模式和機(jī)制,提高數(shù)據(jù)存儲(chǔ)和訪問的效率,降低數(shù)據(jù)存儲(chǔ)的成本,建立海量數(shù) 據(jù)處理框架,結(jié)合機(jī)群服務(wù)器,提高海量數(shù)據(jù)存儲(chǔ)機(jī)制的擴(kuò)展性、擴(kuò)充性和靈活性。
[0004] 電力系統(tǒng)海量數(shù)據(jù)存儲(chǔ)與處理系統(tǒng)的使用部門需要基于廉價(jià)的PC實(shí)現(xiàn)快速可靠 的存儲(chǔ),處理PB級(jí)數(shù)據(jù),根據(jù)業(yè)務(wù)需求盡量平衡分布式系統(tǒng)的CAP理論中三點(diǎn)要求,接口要 簡(jiǎn)潔,對(duì)上層應(yīng)用的改動(dòng)盡量產(chǎn)生較小的影響,達(dá)到較好的性價(jià)比。
【發(fā)明內(nèi)容】
[0005] 針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明提出一種電力系統(tǒng)海量數(shù)據(jù)管理系統(tǒng)及其使用方 法,本發(fā)明方法通過仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)與海量仿真數(shù)據(jù)處理子系統(tǒng)的構(gòu)建來說 明。
[0006] 仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)將數(shù)據(jù)分散存儲(chǔ)在多臺(tái)獨(dú)立的互聯(lián)設(shè)備上。采用可擴(kuò) 展的系統(tǒng)結(jié)構(gòu),利用多臺(tái)存儲(chǔ)服務(wù)器分擔(dān)存儲(chǔ)負(fù)荷,利用位置服務(wù)器定位存儲(chǔ)信息,不但提 高了系統(tǒng)的可靠性、可用性和存取效率,還易于擴(kuò)展。
[0007] 仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)采用集群方式來實(shí)現(xiàn),集群通常包含兩類節(jié)點(diǎn):元數(shù) 據(jù)服務(wù)器和文件服務(wù)器。元數(shù)據(jù)服務(wù)器通常只管理名字空間,權(quán)限等元數(shù)據(jù)信息,而底層的 磁盤塊分配釋放則交由各個(gè)文件服務(wù)器單獨(dú)管理。文件服務(wù)器提供給外界的是面向數(shù)據(jù)對(duì) 象的訪問接口,對(duì)象大小遠(yuǎn)大于磁盤塊大小,且可以大小不一??蛻舳送ǔV辉趫?zhí)行元數(shù)據(jù) 操作(如打開、創(chuàng)建文件)時(shí)和元數(shù)據(jù)服務(wù)器交互,數(shù)據(jù)I/O操作則直接與文件服務(wù)器交 互。該架構(gòu)把磁盤塊管理,數(shù)據(jù)I/O處理分散到多個(gè)文件服務(wù)器,從而提高了系統(tǒng)的可擴(kuò)展 性。
[0008] 海量仿真數(shù)據(jù)處理子系統(tǒng)為了能夠高效存儲(chǔ)處理海量數(shù)據(jù),需要根據(jù)數(shù)據(jù)之間的 關(guān)聯(lián)進(jìn)行合理切分。數(shù)據(jù)切分(Sharding)的基本思想就要把一個(gè)數(shù)據(jù)庫(kù)切分成多個(gè)部分 放到不同的數(shù)據(jù)庫(kù)(server)上,從而緩解數(shù)據(jù)存儲(chǔ)在單一數(shù)據(jù)庫(kù)所帶來的性能問題。
[0009] 數(shù)據(jù)切分可以是物理上的,對(duì)數(shù)據(jù)通過一系列的切分規(guī)則將數(shù)據(jù)分布到不同的數(shù) 據(jù)庫(kù)服務(wù)器上,通過路由規(guī)則路由訪問特定的數(shù)據(jù)庫(kù)。這樣一來每次訪問面對(duì)的就不是單 臺(tái)服務(wù)器了,而是N臺(tái)服務(wù)器,這樣就可以降低單臺(tái)機(jī)器的負(fù)載壓力。數(shù)據(jù)切分也可以是數(shù) 據(jù)庫(kù)內(nèi)的,對(duì)數(shù)據(jù)通過一系列的切分規(guī)則,將數(shù)據(jù)分布到一個(gè)數(shù)據(jù)庫(kù)的不同表中。
[0010] 本發(fā)明的目的是采用下述技術(shù)方案實(shí)現(xiàn)的:
[0011] 一種電力系統(tǒng)海量數(shù)據(jù)管理系統(tǒng),其改進(jìn)之處在于,所述系統(tǒng)包括仿真數(shù)據(jù)分布 式存儲(chǔ)子系統(tǒng)和海量仿真數(shù)據(jù)處理子系統(tǒng);
[0012] 所述仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)將數(shù)據(jù)分散存儲(chǔ)在多臺(tái)獨(dú)立的互聯(lián)設(shè)備上;
[0013] 所述仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)采用集群方式,其包含兩類節(jié)點(diǎn):元數(shù)據(jù)服務(wù)器 master和文件服務(wù)器server ;
[0014] 所述海量仿真數(shù)據(jù)處理子系統(tǒng)對(duì)數(shù)據(jù)通過切分規(guī)則將數(shù)據(jù)分布到不同的數(shù)據(jù)庫(kù) 服務(wù)器上,通過路由規(guī)則路由訪問特定的數(shù)據(jù)庫(kù);
[0015] 所述海量仿真數(shù)據(jù)處理子系統(tǒng)包括數(shù)據(jù)訪問層,數(shù)據(jù)管理層和數(shù)據(jù)存儲(chǔ)層。
[0016] 優(yōu)選的,所述系統(tǒng)對(duì)電力系統(tǒng)海量仿真數(shù)據(jù)進(jìn)行結(jié)構(gòu)化與非結(jié)構(gòu)化進(jìn)行分類處 理,通過仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)存儲(chǔ)電力系統(tǒng)仿真計(jì)算分析非結(jié)構(gòu)化數(shù)據(jù),通過關(guān)系 型數(shù)據(jù)庫(kù)依據(jù)細(xì)分屬性進(jìn)行水平切分后分庫(kù)分表存儲(chǔ)與處理。
[0017] 優(yōu)選的,所述仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)由一個(gè)單一的元數(shù)據(jù)服務(wù)器和多個(gè)文件 服務(wù)器組成,客戶端client訪問主節(jié)點(diǎn);
[0018] 在子系統(tǒng)中,每個(gè)文件拆成固定大小的塊chunk ;每一個(gè)塊都由master根據(jù)塊創(chuàng) 建的時(shí)間產(chǎn)生一個(gè)64位的chunk handle標(biāo)志;server在本地文件系統(tǒng)保存這些文件塊, 并且根據(jù)chunk handle和字節(jié)區(qū)間,通過操作系統(tǒng)文件系統(tǒng)讀寫這些塊數(shù)據(jù)。
[0019] 優(yōu)選的,所述海量仿真數(shù)據(jù)處理子系統(tǒng)對(duì)于數(shù)據(jù)的切分包括垂直切分和水平切 分;
[0020] 所述垂直切分為把不同格式的數(shù)據(jù),存儲(chǔ)到不同的數(shù)據(jù)庫(kù);
[0021] 所述水平切分為把相同的數(shù)據(jù)格式的數(shù)據(jù),存儲(chǔ)到不同的數(shù)據(jù)庫(kù)。
[0022] 優(yōu)選的,所述數(shù)據(jù)訪問層用于接受用戶接入,等待用戶輸入,對(duì)輸入語句進(jìn)行輸出 轉(zhuǎn)換和輸入拆分,并保存拆分信息;
[0023] 所述數(shù)據(jù)管理層負(fù)責(zé)調(diào)用底層接口,通過傳遞參數(shù)來進(jìn)行管理;并接受數(shù)據(jù)訪問 層提取的輸入信息,調(diào)用底層接口,獲得所需數(shù)據(jù);
[0024] 所述數(shù)據(jù)存儲(chǔ)層用于與操作系統(tǒng)對(duì)接,調(diào)用底層文件接口對(duì)文件進(jìn)行操作。
[0025] 本發(fā)明基于另一目的提供的一種電力系統(tǒng)海量數(shù)據(jù)使用方法,其改進(jìn)之處在于, 所述方法包括仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)數(shù)據(jù)處理方法和海量仿真數(shù)據(jù)處理子系統(tǒng)處理 方法。
[0026] 優(yōu)選的,所述仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)數(shù)據(jù)處理方法包括
[0027] (1)寫入過程;
[0028] (I. 1)客戶端向元數(shù)據(jù)服務(wù)器發(fā)送查找命令,檢查所要?jiǎng)?chuàng)建文件的父目錄下是否 已有該文件名目錄項(xiàng),元數(shù)據(jù)服務(wù)器通過查詢B+樹檢查是否有并返回結(jié)果;
[0029] (1. 2)若此文件名不存在,客戶端向元數(shù)據(jù)服務(wù)器發(fā)送信息在該目錄下創(chuàng)建文件, 指定文件名以及該文件的副本數(shù),元數(shù)據(jù)服務(wù)器在名字空間中添加該文件名目錄項(xiàng),并向 客戶端返回該文件對(duì)應(yīng)的文件句柄,該文件句柄代表這個(gè)文件;
[0030] (1.3)客戶端準(zhǔn)備向文件的某偏移量寫入數(shù)據(jù),先算得該偏移量位于第幾個(gè) server,向元數(shù)據(jù)服務(wù)器發(fā)送定位命令創(chuàng)建該偏移量對(duì)應(yīng)的chunk ;
[0031] (1. 4)元數(shù)據(jù)服務(wù)器為該chunk分配chunk號(hào),并優(yōu)選3個(gè)sever服務(wù)器來存放這 個(gè)chunk,元數(shù)據(jù)服務(wù)器向被選中的3個(gè)server服務(wù)器發(fā)送寫入信息,被選中的3個(gè)server 服務(wù)器創(chuàng)建該chunk并返回成功;
[0032] (1. 5)元數(shù)據(jù)服務(wù)器在接收到所有創(chuàng)建成功信息后向客戶端返回成功;
[0033] (1. 6)客戶端向3個(gè)sever服務(wù)器寫數(shù)據(jù);
[0034] (2)讀取過程;
[0035] (2. 1)客戶端向元數(shù)據(jù)服務(wù)器發(fā)送查找命令獲取所要讀取文件的文件句柄;
[0036] (2. 2)向元數(shù)據(jù)服務(wù)器獲取文件的布局信息;
[0037] (2. 3)客戶端向元數(shù)據(jù)服務(wù)器發(fā)送命令索取所要讀取chunk的讀租約,若可分配 租約,則元數(shù)據(jù)服務(wù)器返回一個(gè)租約號(hào);
[0038] (2. 4)客戶端根據(jù)位置信息,從中選擇一個(gè)chunk服務(wù)器,向其發(fā)送讀命令,開始 讀取據(jù);
[0039] (2. 5)在讀取過程中,客戶端還可向另外兩個(gè)chunk服務(wù)器讀數(shù)據(jù),并發(fā)讀取提高 吞吐莖;
[0040] (2. 6)數(shù)據(jù)讀完后,客戶端向元數(shù)據(jù)服務(wù)器發(fā)送釋放命令,釋放租約。
[0041] 進(jìn)一步地,
[0042] 所述寫租約為當(dāng)需要向chunk寫入數(shù)據(jù)時(shí),對(duì)應(yīng)的主chunk服務(wù)器查看是否擁有 該chunk的寫租約,沒有或已過期則嘗試向元數(shù)據(jù)服務(wù)器獲取或更新寫租約;該chunk正在 被復(fù)制到其他chunk服務(wù)器或者已經(jīng)分配寫租約或讀租約,則返回失敗,否則返回成功并 且chunk的版本號(hào)增一;
[0043] 讀租約為在客戶端需要讀取某個(gè)chunk的數(shù)據(jù)時(shí),獲取這個(gè)chunk的讀租約,該 chunk沒有分配寫租約而且數(shù)據(jù)已全部寫入磁盤,則返回成功,否則返回失敗。
[0044] 優(yōu)選的,所述步驟(2. 2)中布局信息組成文件的各個(gè)chunk ;信息的列表,每一項(xiàng) 包含偏移量、chunk號(hào)、版本號(hào)和位置信息,位置信息標(biāo)注chunk所在server服務(wù)器內(nèi)位置。
[0045] 優(yōu)選的,所述海量仿真數(shù)據(jù)處理子系統(tǒng)處理方法包括
[0046] (10. 1)系統(tǒng)運(yùn)行,進(jìn)行初始化,讀入配置文件;
[0047] (10. 2)依照配置文件中的信息,找到對(duì)應(yīng)位置,加載底層數(shù)據(jù)文件;
[0048] (10. 3)如底層文件出錯(cuò),系統(tǒng)做出相應(yīng)的判斷,不能修正則直接退出,能夠修正則 繼續(xù)運(yùn)行;如文件不存在,創(chuàng)建所需的字典文件和數(shù)據(jù)文件以及其索引文件;
[0049] (10. 4)對(duì)字典文件進(jìn)行初始化并寫入頭部信息和root節(jié)點(diǎn)的信息,數(shù)據(jù)文件初 始化文件metainfo信息并寫入,索引文件初始化頭部信息并寫入;
[0050] (10. 5)系統(tǒng)加載數(shù)據(jù)訪問所需要的表信息文件,判斷所需要的信息文件是否可 打開,如沒有,創(chuàng)建一個(gè)空文件,等待用戶手動(dòng)輸入,如沒有表的信息,而用戶對(duì)表進(jìn)行了操 作,直接返回錯(cuò)誤的提示,提示用戶錯(cuò)誤,如用戶輸入了表的信息文件,系統(tǒng)會(huì)對(duì)表信息文 件進(jìn)行處理,保存相應(yīng)的數(shù)據(jù),標(biāo)記需要進(jìn)行轉(zhuǎn)換的屬性;
[0051] (10. 5)系統(tǒng)掛起,繼續(xù)等待輸入信息,對(duì)輸入信息進(jìn)行提取,對(duì)提取的信息輸入到 管理對(duì)象,進(jìn)行底層轉(zhuǎn)換,對(duì)轉(zhuǎn)換的信息進(jìn)一步加工,由訪問層對(duì)SQL語句進(jìn)行拆解,拆分 SQL語言到語句中的屬性轉(zhuǎn)到對(duì)應(yīng)的表上進(jìn)行操作;
[0052] (10. 6)循環(huán)等待輸入,如中間有錯(cuò)誤,程序會(huì)異常終止,并且提示錯(cuò)誤;否則等待 用戶正常輸入結(jié)束符,然后程序終止。
[0053] 與現(xiàn)有技術(shù)比,本發(fā)明的有益效果為:
[0054] 1、降低用戶使用電力系統(tǒng)海量數(shù)據(jù)存儲(chǔ)與處理系統(tǒng)的難度
[0055] 仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)對(duì)外提供標(biāo)準(zhǔn)的POSIX接口,不需要對(duì)使用海量數(shù)據(jù) 存儲(chǔ)與處理系統(tǒng)的傳統(tǒng)分布式并行計(jì)算平臺(tái)等應(yīng)用進(jìn)行調(diào)整修改,無縫對(duì)接原有電力系統(tǒng) 仿真計(jì)算分析應(yīng)用,并給予用戶及時(shí)的技術(shù)支持,降低了應(yīng)用準(zhǔn)入門檻和難度,降低各用戶 使用電力系統(tǒng)海量數(shù)據(jù)存儲(chǔ)與處理系統(tǒng)的難度。
[0056] 2、精益化成本控制,降低業(yè)務(wù)基礎(chǔ)設(shè)施成本
[0057] 基于廉價(jià)PC機(jī)構(gòu)建,易擴(kuò)展,配置靈活,所需所用,隨時(shí)可以方便快捷地?cái)U(kuò)展存儲(chǔ) 空間,降低存儲(chǔ)系統(tǒng)投資成本、運(yùn)維成本,并且能充分利用一批已淘汰的低配置服務(wù)器,一 定程度上延長(zhǎng)服務(wù)器使用年限,節(jié)省大量的硬件投入,極大降低運(yùn)營(yíng)和服務(wù)硬件成本。
[0058] 3、有效提升海量仿真數(shù)據(jù)存儲(chǔ)與處理能力
[0059] 建立了仿真數(shù)據(jù)分布式存儲(chǔ)、分布式數(shù)據(jù)處理機(jī)制,顯著提升電力系統(tǒng)仿真計(jì)算 分析關(guān)系數(shù)據(jù)庫(kù)的訪問性能,提高電力系統(tǒng)仿真計(jì)算支持用戶并發(fā)數(shù)量上限,有助于改善 在線用戶存取數(shù)據(jù)體驗(yàn),解決電力系統(tǒng)仿真分析計(jì)算因仿真電網(wǎng)不同時(shí)間和空間上的特 性,在現(xiàn)有電網(wǎng)模型基礎(chǔ)上派生出大量附加數(shù)據(jù)的存儲(chǔ)與處理難題。
[0060] 4、提升資源利用率,帶來經(jīng)濟(jì)效益和社會(huì)效益
[0061] 電力系統(tǒng)海量數(shù)據(jù)存儲(chǔ)與處理系統(tǒng)可以提升資源利用率,充分利用電網(wǎng)企業(yè)大量 閑置的廉價(jià)PC機(jī)構(gòu)建海量數(shù)據(jù)存儲(chǔ)與處理系統(tǒng);提高運(yùn)維水平,讓工作人員從繁重的硬件 管理中解脫出來,減少人力和硬件投入,降低能源消耗,為企業(yè)帶來顯著的經(jīng)濟(jì)效益。電力 系統(tǒng)海量數(shù)據(jù)存儲(chǔ)與處理系統(tǒng),踐行資源共享、降本增效、節(jié)能減排理念,給電網(wǎng)公司帶來 良好的社會(huì)效益。
【專利附圖】
【附圖說明】
[0062] 圖1為本發(fā)明提供的仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)架構(gòu)圖。
[0063] 圖2為本發(fā)明提供的仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)數(shù)據(jù)寫入流程圖。
[0064] 圖3為本發(fā)明提供的仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)數(shù)據(jù)讀取流程圖。
[0065] 圖4為本發(fā)明提供的數(shù)據(jù)庫(kù)水平切分示意圖。
[0066] 圖5為本發(fā)明提供的拆分大表中小表不意圖。
[0067] 圖6為本發(fā)明提供的海量仿真數(shù)據(jù)處理子系統(tǒng)架構(gòu)圖。
[0068] 圖7為本發(fā)明提供的用戶訪問工作流程示意圖。
[0069] 圖8為本發(fā)明提供的數(shù)據(jù)管理層示意圖。
[0070] 圖9為本發(fā)明提供的海量仿真數(shù)據(jù)處理子系統(tǒng)流程圖。
【具體實(shí)施方式】
[0071] 下面結(jié)合附圖對(duì)本發(fā)明的【具體實(shí)施方式】作進(jìn)一步的詳細(xì)說明。
[0072] 本發(fā)明關(guān)鍵詞說明:
[0073] 電力系統(tǒng)海量數(shù)據(jù)存儲(chǔ)與處理系統(tǒng):基于電力系統(tǒng)海量數(shù)據(jù)存儲(chǔ)與處理技術(shù),支 持海量仿真計(jì)算數(shù)據(jù)高效存儲(chǔ)與處理,包括仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)和海量仿真數(shù)據(jù)處 理子系統(tǒng)。
[0074] 仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng):將數(shù)據(jù)分散存儲(chǔ)在多臺(tái)獨(dú)立的互聯(lián)設(shè)備上,采用可 擴(kuò)展的系統(tǒng)架構(gòu),利用多臺(tái)存儲(chǔ)服務(wù)器分擔(dān)存儲(chǔ)負(fù)荷,利用位置服務(wù)器定位存儲(chǔ)信息。
[0075] 海量仿真數(shù)據(jù)處理子系統(tǒng):對(duì)數(shù)據(jù)通過一系列的切分規(guī)則將數(shù)據(jù)分布到不同的數(shù) 據(jù)庫(kù)服務(wù)器上,通過路由規(guī)則路由訪問特定的數(shù)據(jù)庫(kù),從而緩解數(shù)據(jù)存儲(chǔ)在單一數(shù)據(jù)庫(kù)所 帶來的性能問題。
[0076] 關(guān)系型數(shù)據(jù):關(guān)系型數(shù)據(jù)是以關(guān)系數(shù)學(xué)模型來表示的數(shù)據(jù)。關(guān)系數(shù)學(xué)模型中以二 維表的形式來描述數(shù)據(jù)。
[0077] 結(jié)構(gòu)化數(shù)據(jù):即行數(shù)據(jù),存儲(chǔ)在數(shù)據(jù)庫(kù)里,可以用二維表結(jié)構(gòu)來邏輯表達(dá)實(shí)現(xiàn)的 數(shù)據(jù)。
[0078] 非結(jié)構(gòu)化數(shù)據(jù):包括所有格式的辦公文檔、文本、圖片、XML、HTML、各類報(bào)表、圖像 和音頻/視頻?目息等等。
[0079] E格式文件:國(guó)家電網(wǎng)公司規(guī)定的電網(wǎng)數(shù)據(jù)交換標(biāo)準(zhǔn),類似于xml格式。
[0080] 1.電力系統(tǒng)海量數(shù)據(jù)存儲(chǔ)與處理系統(tǒng)整體架構(gòu)
[0081] 根據(jù)系統(tǒng)原始需求,以中央服務(wù)器系統(tǒng)模式為系統(tǒng)框架進(jìn)行整體構(gòu)建。在架構(gòu)的 基礎(chǔ)上,根據(jù)對(duì)海量電力系統(tǒng)仿真數(shù)據(jù)的存儲(chǔ)和處理要求,對(duì)系統(tǒng)的可擴(kuò)展性,容錯(cuò)性等方 面進(jìn)行改善,提高系統(tǒng)對(duì)大規(guī)模仿真數(shù)據(jù)的高效分析。根據(jù)環(huán)境要求,電力系統(tǒng)海量數(shù)據(jù)存 儲(chǔ)與處理系統(tǒng)主要基于如下考慮:
[0082] (1)系統(tǒng)必須易于擴(kuò)展。要支持大規(guī)模數(shù)據(jù)處理,首先要保證系統(tǒng)能提供海量數(shù)據(jù) 的存儲(chǔ)能力。這就要求系統(tǒng)能擴(kuò)展到成百上千臺(tái)機(jī)器。其次面對(duì)不斷增加的數(shù)據(jù)量,系統(tǒng)只 需要通過簡(jiǎn)單地增加機(jī)器的數(shù)量即可,用戶不需關(guān)心數(shù)據(jù)的組織,系統(tǒng)的負(fù)載均衡等問題。 另外隨著系統(tǒng)的擴(kuò)展,系統(tǒng)能始終保持非常好的性能。
[0083] (3)系統(tǒng)是建立在大量廉價(jià)的普通計(jì)算機(jī)上,因此機(jī)器發(fā)生故障會(huì)很普遍。必須對(duì) 這些節(jié)點(diǎn)計(jì)算機(jī)持續(xù)進(jìn)行檢測(cè),并且在系統(tǒng)的基礎(chǔ)上進(jìn)行:檢查,容錯(cuò),以及從故障中恢復(fù)。 因此,持續(xù)監(jiān)視,錯(cuò)誤檢測(cè),容錯(cuò)處理,自動(dòng)恢復(fù)必須集成到這個(gè)文件系統(tǒng)的設(shè)計(jì)中。
[0084] (3)支持高級(jí)語言查詢接口。傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)使用SQL(Structured Query Language)語言進(jìn)行數(shù)據(jù)處理。SQL語言本身簡(jiǎn)單且易于理解,相較于使用低級(jí)的編程語 言,用戶更習(xí)慣于使用類似SQL的編程語言來表達(dá)查詢?nèi)蝿?wù)。本仿真數(shù)據(jù)處理支持面向用 戶的數(shù)據(jù)庫(kù)查詢語言SQL。
[0085] (4)數(shù)據(jù)處理任務(wù)通常由兩類讀取組成:大的流式讀取和小規(guī)模的隨機(jī)讀取。在 大的流式讀取中,每個(gè)讀操作通常要讀取幾百KB的數(shù)據(jù),每次讀取IMB或者以上的數(shù)據(jù)也 是很常見的。對(duì)于同一個(gè)客戶端來說,往往會(huì)發(fā)起連續(xù)的讀取操作順序讀取一個(gè)文件。小 規(guī)模的隨機(jī)讀取通常在文件的不同位置,讀取幾 KB數(shù)據(jù)。對(duì)于性能有過特別考慮的應(yīng)用通 常會(huì)作批處理并且對(duì)他們讀取的內(nèi)容進(jìn)行排序,這樣可以使得他們的讀取始終是單向順序 讀取,而不需要往回讀取數(shù)據(jù)。
[0086] 基于以上分析,本系統(tǒng)包括兩部分:仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)和海量仿真數(shù)據(jù) 處理子系統(tǒng)。
[0087] 2.仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)
[0088] 考慮到用戶的可操作性,采用中心服務(wù)器(master)模式。中心服務(wù)器存儲(chǔ)仿真數(shù) 據(jù)的元數(shù)據(jù)信息,不存儲(chǔ)仿真數(shù)據(jù)。用戶的數(shù)據(jù)訪問請(qǐng)求由中心服務(wù)器定位后,轉(zhuǎn)發(fā)到具體 的文件服務(wù)器處理用戶的數(shù)據(jù)讀取請(qǐng)求。因此,中心服務(wù)器的負(fù)載不會(huì)很大,不會(huì)成為系統(tǒng) 的瓶頸。當(dāng)數(shù)據(jù)規(guī)模增大時(shí),可以增加多個(gè)中心服務(wù)器。服務(wù)器之間形成級(jí)聯(lián)的方式。中 心服務(wù)器模式操作簡(jiǎn)單,利于用戶管理。當(dāng)數(shù)據(jù)增加時(shí),通過增加服務(wù)器節(jié)點(diǎn)的數(shù)量,體現(xiàn) 了系統(tǒng)的可擴(kuò)展性。
[0089] 數(shù)據(jù)存取API。系統(tǒng)提供相應(yīng)的客戶端的API接口,實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)入和讀取。文件 以分層目錄的形式組織,用路徑名來標(biāo)識(shí)。支持常用的操作,如創(chuàng)建新文件,刪除文件,打開 文件,關(guān)閉文件,讀和寫文件。
[0090] 系統(tǒng)提供快照和記錄追加操作。快照以很低的成本創(chuàng)建一個(gè)文件或者目錄樹的拷 貝;記錄追加操作允許多個(gè)客戶端同時(shí)對(duì)一個(gè)文件進(jìn)行數(shù)據(jù)追加操作。同時(shí)保證每個(gè)客戶 端的追加操作都是原子性的。多個(gè)客戶可以在不需要額外的同步鎖定的情況下,同時(shí)對(duì)一 個(gè)文件追加數(shù)據(jù)。
[0091] 2. 1仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)架構(gòu)
[0092] 系統(tǒng)集群由一個(gè)單一的master和多個(gè)server (文件服務(wù)器)組成,主節(jié)點(diǎn)會(huì)有多 個(gè)客戶端client訪問。每一個(gè)節(jié)點(diǎn)都是一個(gè)普通的計(jì)算機(jī),運(yùn)行的是一個(gè)用戶級(jí)別的服務(wù) 器進(jìn)程。如圖1所示:
[0093] 在系統(tǒng)中,每一個(gè)文件都拆成固定大小的塊(chunk)。每一個(gè)塊都由master根據(jù) 塊創(chuàng)建的時(shí)間產(chǎn)生一個(gè)全局唯一的以后不會(huì)改變的64位的chunk handle標(biāo)志。Sever在 本地文件系統(tǒng)保存這些文件塊,并且根據(jù)chunk handle和字節(jié)區(qū)間,通過操作系統(tǒng)文件系 統(tǒng)讀寫這些塊數(shù)據(jù)。處于可靠性的考慮,每一個(gè)塊都會(huì)在不同的server上保存?zhèn)浞荨H笔?情況下,保存3個(gè)備份。不過用戶對(duì)于不同的文件的命名空間(namespace)區(qū)域,可指定不 同的復(fù)制級(jí)別。
[0094] (1)元數(shù)據(jù)服務(wù)器(master)
[0095] 在整個(gè)系統(tǒng)中,一個(gè)文件系統(tǒng)的所有元數(shù)據(jù)由單個(gè)master來統(tǒng)一管理,大大提高 了系統(tǒng)的可操作性,元數(shù)據(jù)包括的內(nèi)容有:
[0096] 目錄項(xiàng)信息:系統(tǒng)采用傳統(tǒng)的目錄結(jié)構(gòu)命名空間,目錄樹中的所有節(jié)點(diǎn)(文件和 目錄),均由一個(gè)全局唯一的文件號(hào)來標(biāo)識(shí),根目錄的文件號(hào)固定為2,目錄項(xiàng)信息指的是 目錄樹中各目錄項(xiàng)所包含的各目錄項(xiàng)的名稱及文件ID ;
[0097] 屬性信息:各目錄、文件的創(chuàng)建,修改時(shí)間,及文件的副本數(shù)、大??;
[0098] chunk信息:一個(gè)文件依次由哪些chunk組成的;
[0099] 位置信息:chunk的各個(gè)副本被保存在那個(gè)chunk服務(wù)器上;
[0100] 租約信息:系統(tǒng)次用租約來維持多個(gè)客戶端情況下數(shù)據(jù)的一致性,這些租約信息 由元數(shù)據(jù)服務(wù)器(master)來統(tǒng)一管理。
[0101] master的設(shè)計(jì)大大簡(jiǎn)化系統(tǒng)設(shè)計(jì),并且也讓master能夠基于全局的角度來管理 chunk的存放和做出復(fù)制的決定。不過,應(yīng)盡量減少master的讀和寫操作,以避免它成為 瓶頸??蛻舳擞肋h(yuǎn)不會(huì)通過master來做文件的數(shù)據(jù)讀寫。客戶端只是問master它應(yīng)當(dāng) 訪問哪個(gè)server來獲取所需要的數(shù)據(jù)??蛻舳嗽谝欢〞r(shí)間內(nèi)cache這個(gè)信息,并且在后 續(xù)的操作中都直接和server進(jìn)行操作。master負(fù)責(zé)管理所有的文件系統(tǒng)的元數(shù)據(jù)。包括 namespace,訪問控制信息,文件到chunk的映射關(guān)系,當(dāng)前chunk的位置等等信息。master 也同樣控制系統(tǒng)級(jí)別的活動(dòng),比如chunk的分配管理,孤點(diǎn)chunk的垃圾回收機(jī)制,sever之 間的chunk鏡像管理。master和這些server之間會(huì)有定期的心跳線進(jìn)行通訊,并且心跳線 傳遞信息和server的運(yùn)行狀態(tài)。
[0102] 所有的元數(shù)據(jù)都是保存在master的內(nèi)存里。頭兩個(gè)數(shù)據(jù)類型同時(shí)也是由master 本地硬盤的記錄所有變化信息的operation log來持久化保存的,這個(gè)記錄也會(huì)在遠(yuǎn)端機(jī) 器上保存副本。通過log,在master宕機(jī)的時(shí)候,可以簡(jiǎn)單,可靠的恢復(fù)master的狀態(tài)。 master并不持久化保存chunk位置信息。相反,他在啟動(dòng)的時(shí)候以及server加入集群的時(shí) 候,向每一個(gè)server詢問他的chunk信息。
[0103] (2) server文件數(shù)據(jù)服務(wù)器
[0104] Server端保存數(shù)據(jù),chunk的大小是一個(gè)設(shè)計(jì)的關(guān)鍵參數(shù)。在系統(tǒng)中,一個(gè)文件 被分割成多個(gè)chunk,每個(gè)chunk大小固定為64M,所以通過簡(jiǎn)單的模運(yùn)算計(jì)算出某個(gè)文件 偏移量在該文件第幾個(gè)chunk的多少偏移量上。每一個(gè)chunk的實(shí)例都是作為在server 上的Linux文件格式存放的,并且只有當(dāng)需要的情況下才會(huì)增長(zhǎng)。之后分配空間的機(jī)制可 以通過文件內(nèi)部分段避免空間浪費(fèi)。另一個(gè)關(guān)鍵是chunk的記錄。master并不持久化保 存server上保存的chunk的記錄。它只是在啟動(dòng)的時(shí)候簡(jiǎn)單的從server取得這些信息。 master可以再啟動(dòng)之后一直保持自己的這些信息時(shí)最新的,因?yàn)樗刂扑械腸hunk的位 置,并且使用普通心跳信息監(jiān)視server的狀態(tài)。
[0105] 為了進(jìn)行數(shù)據(jù)的有效保存,防止宕機(jī)時(shí)數(shù)據(jù)的丟失,一個(gè)chunk默認(rèn)被復(fù)制成3 份,保存在3個(gè)不同的sever服務(wù)器中,客戶端可以為每個(gè)文件指定不同的副本個(gè)數(shù)。三副 本就保證了在兩個(gè)sever服務(wù)器故障情況下,仍能從第三個(gè)sever服務(wù)器上的副本讀出數(shù) 據(jù),提高了系統(tǒng)的可靠性。
[0106] 在chunk數(shù)據(jù)寫入時(shí),若某個(gè)sever服務(wù)器突然故障,會(huì)導(dǎo)致相應(yīng)的副本更新失 敗,進(jìn)而影響chunk各個(gè)副本的一致性。為了解決這個(gè)問題,為每個(gè)chunk副本分配一個(gè)版 本號(hào),副本每更新一次則版本號(hào)上升,這樣就可以通過比較版本號(hào)來發(fā)現(xiàn)過期的副本。
[0107] 連接到各個(gè)應(yīng)用系統(tǒng)的客戶端代碼包含了文件系統(tǒng)的API,并且會(huì)和master和 server進(jìn)行通訊處理,代表應(yīng)用程序進(jìn)行讀寫數(shù)據(jù)的操作。客戶端和master進(jìn)行元數(shù)據(jù)的 操作,但是所有的數(shù)據(jù)相關(guān)的通訊是直接和server進(jìn)行的。
[0108] 客戶端或者server都不會(huì)cache文件數(shù)據(jù)。這是因?yàn)榇蟛糠值膽?yīng)用都是流式訪 問超大文件或者操作的數(shù)據(jù)集太大而不能被cache。不涉及cache系統(tǒng)使得客戶端以及整 個(gè)系統(tǒng)大大簡(jiǎn)化了。Server不需要cache文件數(shù)據(jù),因?yàn)閏hunks就像本地文件一樣的保 存,操作系統(tǒng)的buffer cache已經(jīng)把常用的數(shù)據(jù)cache到了內(nèi)存里。
[0109] (3)客戶端(Client)
[0110] 系統(tǒng)的客戶端通過master及server服務(wù)器交互,完成對(duì)文件系統(tǒng)的修改和訪問 等操作。為了減少與master服務(wù)器的交互次數(shù),客戶端會(huì)緩存元數(shù)據(jù)的信息。系統(tǒng)的客 戶端對(duì)讀取和寫入數(shù)據(jù)進(jìn)行緩存,這就存在緩存一致性的問題,系統(tǒng)采用讀寫租約(Lease) 解決這個(gè)問題,所有的租約由元數(shù)據(jù)服務(wù)器統(tǒng)一管理,每個(gè)租約有300秒的時(shí)限,過期作 廢。讀寫租約的方式入下:
[0111] 1)寫租約:當(dāng)需要向Chunk寫入數(shù)據(jù)時(shí),對(duì)應(yīng)的主chunk服務(wù)器首先查看是否擁 有該chunk的寫租約,如果沒有或已過期則嘗試向元數(shù)據(jù)服務(wù)器獲取或更新寫租約,如果 該chunk正在被復(fù)制到其他chunk服務(wù)器或者已經(jīng)分配寫租約或讀租約,則返回失敗,否則 返回成功并且chunk的版本號(hào)增一;
[0112] 2)讀租約:在客戶端需要讀取某個(gè)chunk的數(shù)據(jù)時(shí),它首先嘗試去獲取這個(gè)chunk 的讀租約,如果該chunk沒有分配寫租約而且數(shù)據(jù)已全部寫入磁盤,則返回成功,否則返回 失敗。
[0113] 3)讀寫租約保證了一個(gè)chunk同時(shí)只能由一個(gè)客戶端寫入,而且一個(gè)或多個(gè)客戶 端在讀取某chunk數(shù)據(jù)時(shí),該chunk數(shù)據(jù)不會(huì)被修改,這樣客戶端就能夠把讀取的數(shù)據(jù)緩存 在本地,因?yàn)榫彺嬷械臄?shù)據(jù)與server服務(wù)器上保存的數(shù)據(jù)一定是一致的。
[0114] 2. 2仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)處理流程
[0115] 仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)數(shù)據(jù)處理流程如下:
[0116] (1)寫入過程
[0117] 如圖2所示,步驟1,數(shù)據(jù)節(jié)點(diǎn)之間的交互過程,客戶端首先向元數(shù)據(jù)服務(wù)器發(fā)送 查找命令,檢查所要?jiǎng)?chuàng)建文件的父目錄下是否已有該文件名目錄項(xiàng),元數(shù)據(jù)服務(wù)器通過查 詢B+樹檢查是否有并返回結(jié)果。
[0118] 步驟2,若得知此文件名不存在,客戶端向元數(shù)據(jù)服務(wù)器發(fā)送信息在該目錄下創(chuàng)建 文件,指定文件名以及該文件的副本數(shù),元數(shù)據(jù)服務(wù)器在名字空間中添加該文件名目錄項(xiàng), 并向客戶端返回該文件對(duì)應(yīng)的文件句柄,之后的交互中,該文件句柄就代表這個(gè)文件。
[0119] 步驟3,然后客戶端準(zhǔn)備向文件的某偏移量寫入數(shù)據(jù),它先算得該偏移量位于第幾 個(gè)server,向元數(shù)據(jù)服務(wù)器發(fā)送定位命令創(chuàng)建該偏移量對(duì)應(yīng)的chunk。
[0120] 步驟4,元數(shù)據(jù)服務(wù)器為該chunk分配chunk號(hào),并優(yōu)選(根據(jù)當(dāng)時(shí)的容量負(fù)載情 況以及機(jī)架位置)3個(gè)(若副本為3) sever服務(wù)器來存放這個(gè)chunk,然后這個(gè)3個(gè)server 服務(wù)器發(fā)送信息,3個(gè)server服務(wù)器創(chuàng)建該chunk并返回成功。
[0121] 步驟5,元數(shù)據(jù)服務(wù)器在接收到所有創(chuàng)建成功信息后向客戶端返回成功。
[0122] 步驟6,客戶端向3個(gè)sever服務(wù)器寫數(shù)據(jù)。
[0123] (2)讀取過程
[0124] 客戶端讀取一個(gè)文件數(shù)據(jù)的過程,如圖3所示,步驟1,客戶端想元數(shù)據(jù)服務(wù)器發(fā) 送查找命令獲取所要讀取文件的文件句柄。
[0125] 步驟2,向元數(shù)據(jù)服務(wù)器獲取文件的布局信息。布局信息的內(nèi)容是組成該文件的各 個(gè)chunk。信息的列表,每一項(xiàng)包含了偏移量、chunk號(hào)、版本號(hào)、位置信息,位置信息說明了 這個(gè)chunk位于那些server服務(wù)器(由IP來表示)內(nèi)。
[0126] 步驟3,客戶端向元數(shù)據(jù)服務(wù)器發(fā)送命令索取所要讀取chunk的讀租約,若可以分 配租約,則元數(shù)據(jù)服務(wù)器返回一個(gè)租約號(hào)。
[0127] 步驟4,客戶端根據(jù)位置信息,從中選擇一個(gè)chunk服務(wù)器,向其發(fā)送讀命令,開始 讀取據(jù)了。
[0128] 步驟5,在讀取過程中,客戶端還可以向另外兩個(gè)chunk服務(wù)器讀數(shù)據(jù),并發(fā)讀取 提尚吞吐量。
[0129] 步驟6,當(dāng)數(shù)據(jù)讀完后,客戶端向元數(shù)據(jù)服務(wù)器發(fā)送釋放命令,釋放租約。
[0130] 3.海量仿真數(shù)據(jù)數(shù)據(jù)處理子系統(tǒng)
[0131] 對(duì)于數(shù)據(jù)的切分主要有兩種方法,分別是垂直切分和水平切分。垂直切分 (Vertical Partition/Sharding):就是把不同格式的數(shù)據(jù),存儲(chǔ)到不同的數(shù)據(jù)庫(kù)。水平切 分(Horizontal Partition/Sharding):就是把相同的數(shù)據(jù)格式的數(shù)據(jù),存儲(chǔ)到不同的數(shù)據(jù) 庫(kù)。一般來說,對(duì)于海量數(shù)據(jù)的數(shù)據(jù)庫(kù),如果是因?yàn)楸矶喽鴶?shù)據(jù)多,這時(shí)候適合使用垂直切 分,即把關(guān)系緊密(比如同一模塊)的表切分出來放在一個(gè)server上。如果表并不多,但每 張表的數(shù)據(jù)非常多,這時(shí)候適合水平切分,如圖4所示,即把表的數(shù)據(jù)按某種規(guī)則(比如按 ID散列)切分到多個(gè)數(shù)據(jù)庫(kù)(server)上。當(dāng)然,現(xiàn)實(shí)中更多是這兩種情況混雜在一起,這 時(shí)候需要根據(jù)實(shí)際情況做出選擇,也可能會(huì)綜合使用以工程為維度進(jìn)行垂直與以單表為維 護(hù)進(jìn)行水平切分,從而將原有數(shù)據(jù)庫(kù)切分成類似矩陣一樣可以無限擴(kuò)充的數(shù)據(jù)庫(kù)(server) 陣列。
[0132] 通過對(duì)電力系統(tǒng)仿真計(jì)算分析數(shù)據(jù)的分析,擬采用水平切分,以減少節(jié)點(diǎn)間的數(shù) 據(jù)傳遞。具體切分原則如下:
[0133] (1)結(jié)合業(yè)務(wù)邏輯和表間關(guān)系,將當(dāng)前shard劃分成多個(gè)更小的shard,通常情況 下,這些更小的shard每一個(gè)都只包含一個(gè)主表(將以該表ID進(jìn)行散列的表)和多個(gè)與其 關(guān)聯(lián)或間接關(guān)聯(lián)的次表。這種一個(gè)shard-張主表多張次表的狀況是水平切分的必然結(jié) 果。這樣切分下來,shard數(shù)量就會(huì)迅速增多。如果每一個(gè)shard代表一個(gè)獨(dú)立的數(shù)據(jù)庫(kù), 那么管理和維護(hù)數(shù)據(jù)庫(kù)將會(huì)非常麻煩,而且這些小shard往往只有兩三張表,為此而建立 一個(gè)新庫(kù),利用率并不高,因此,在水平切分完成后可再進(jìn)行一次"反向的Merge",S卩:將業(yè) 務(wù)上相近,并且具有相近數(shù)據(jù)增長(zhǎng)速率(主表數(shù)據(jù)量在同一數(shù)量級(jí)上)的兩個(gè)或多個(gè)shard 放到同一個(gè)數(shù)據(jù)庫(kù)上,在邏輯上它們依然是獨(dú)立的shard,有各自的主表,并依據(jù)各自主表 的ID進(jìn)行散列,不同的只是它們的散列取模(即節(jié)點(diǎn)數(shù)量)必需是一致的。這樣,每個(gè)數(shù) 據(jù)庫(kù)結(jié)點(diǎn)上的表格數(shù)量就相對(duì)平均了。
[0134] (2)所有表格均劃分到合適的shard之后,所有跨越shard的表間關(guān)聯(lián)都必須打 斷,在書寫sql時(shí),跨shard的join、group by、order by都將被禁止,需要在應(yīng)用程序?qū)用?協(xié)調(diào)解決這些問題。
[0135] 針對(duì)切分后分布在各數(shù)據(jù)庫(kù)節(jié)點(diǎn)的數(shù)據(jù),系統(tǒng)的處理流程可以分為兩部分。一部 分是數(shù)據(jù)導(dǎo)入,將源數(shù)據(jù)從本地讀取到分布式存儲(chǔ)系統(tǒng)中保存;一部分是查詢執(zhí)行部分,接 收用戶提交的查詢?nèi)蝿?wù),生成查詢計(jì)劃提交給系統(tǒng)執(zhí)行并返回執(zhí)行結(jié)果。這個(gè)過程也包括 查詢過程中的數(shù)據(jù)導(dǎo)入。下面分別對(duì)這兩個(gè)過程進(jìn)行描述。
[0136] 系統(tǒng)首先從元數(shù)據(jù)管理模塊中獲取與源數(shù)據(jù)對(duì)應(yīng)的模式信息,然后根據(jù)源數(shù)據(jù)的 模式信息生成相應(yīng)的數(shù)據(jù)導(dǎo)入任務(wù),對(duì)源數(shù)據(jù)進(jìn)行預(yù)處理,即對(duì)源數(shù)據(jù)按列進(jìn)行劃分。接著 按照特定的路徑將不同列的數(shù)據(jù)存放到不同的文件中,在存儲(chǔ)的過程中按照特定的文件格 式將數(shù)據(jù)以二進(jìn)制的格式壓縮存儲(chǔ)在分布式存儲(chǔ)系統(tǒng)中。
[0137] 系統(tǒng)執(zhí)行查詢?nèi)蝿?wù)的流程為:首先對(duì)用戶提交的查詢?nèi)蝿?wù)進(jìn)行詞法和語法解析生 成中間查詢解析結(jié)果,查詢解析模塊一方面將中間的解析結(jié)果如查詢對(duì)應(yīng)的數(shù)據(jù)表,以及 查詢涉及的屬性列等信息發(fā)送給數(shù)據(jù)導(dǎo)入模塊;一方面繼續(xù)根據(jù)數(shù)據(jù)集的劃分屬性和數(shù)據(jù) 庫(kù)信息對(duì)查詢解析結(jié)果進(jìn)行優(yōu)化,生成查詢執(zhí)行計(jì)劃。其中在生成查詢執(zhí)行計(jì)劃的過程中, 會(huì)根據(jù)數(shù)據(jù)導(dǎo)入模塊生成的數(shù)據(jù)導(dǎo)入策略對(duì)查詢計(jì)劃進(jìn)行優(yōu)化。然后系統(tǒng)將數(shù)據(jù)導(dǎo)入計(jì)劃 和查詢執(zhí)行計(jì)劃提交給流式處理模塊進(jìn)行整合優(yōu)化生成執(zhí)行計(jì)劃,接著將執(zhí)行計(jì)劃編譯成 作業(yè)集提交給數(shù)據(jù)查詢系統(tǒng),由數(shù)據(jù)查詢系統(tǒng)協(xié)調(diào)查詢?cè)跀?shù)據(jù)庫(kù)機(jī)器和并行處理框架中執(zhí) 行,最終查詢結(jié)果保持到分布式存儲(chǔ)系統(tǒng)中。
[0138] 非結(jié)構(gòu)化數(shù)據(jù)由于其數(shù)據(jù)結(jié)構(gòu)的不唯一性,使得其不能直接存儲(chǔ)于關(guān)系型數(shù)據(jù)庫(kù) 中,基于結(jié)構(gòu)化的實(shí)現(xiàn),和成本的考慮,選擇關(guān)系數(shù)據(jù)庫(kù)MySQL來存儲(chǔ)與處理數(shù)據(jù)。
[0139] 對(duì)于非結(jié)構(gòu)化數(shù)據(jù)結(jié)構(gòu)化存儲(chǔ)系統(tǒng)主要有兩大功能,一是實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ),一是實(shí) 現(xiàn)管理機(jī)制。關(guān)系數(shù)據(jù)庫(kù)中使用二維表來進(jìn)行數(shù)據(jù)的存儲(chǔ)。為了將非結(jié)構(gòu)化數(shù)據(jù)同樣存儲(chǔ) 于關(guān)系型數(shù)據(jù)庫(kù)中,考慮也以二維表的形式存儲(chǔ),另外,非結(jié)構(gòu)化數(shù)據(jù)又是Key-Value型。 在關(guān)系數(shù)據(jù)庫(kù)中以二維表的形式也可以存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù)。
[0140] 表 I Key-Value 數(shù)據(jù)表
[0141]
【權(quán)利要求】
1. 一種電力系統(tǒng)海量數(shù)據(jù)管理系統(tǒng),其特征在于,所述系統(tǒng)包括仿真數(shù)據(jù)分布式存儲(chǔ) 子系統(tǒng)和海量仿真數(shù)據(jù)處理子系統(tǒng); 所述仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)將數(shù)據(jù)分散存儲(chǔ)在多臺(tái)獨(dú)立的互聯(lián)設(shè)備上; 所述仿真數(shù)據(jù)分布式存儲(chǔ)子系統(tǒng)采用集群方式,其包含兩類節(jié)點(diǎn):元數(shù)據(jù)服務(wù)器 master和文件服務(wù)器server ; 所述海量仿真數(shù)據(jù)處理子系統(tǒng)對(duì)數(shù)據(jù)通過切分規(guī)則將數(shù)據(jù)分布到不同的數(shù)據(jù)庫(kù)服務(wù) 器上,通過路由規(guī)則路由訪問特定的數(shù)據(jù)庫(kù); 所述海量仿真數(shù)據(jù)處理子系統(tǒng)包括數(shù)據(jù)訪問層,數(shù)據(jù)管理層和數(shù)據(jù)存儲(chǔ)層。
2. 如權(quán)利要求1所述的一種電力系統(tǒng)海量數(shù)據(jù)管理系統(tǒng),其特征在于,所述系統(tǒng)對(duì)電 力系統(tǒng)海量仿真數(shù)據(jù)進(jìn)行結(jié)構(gòu)化與非結(jié)構(gòu)化進(jìn)行分類處理,通過仿真數(shù)據(jù)分布式存儲(chǔ)子系 統(tǒng)存儲(chǔ)電力系統(tǒng)仿真計(jì)算分析非結(jié)構(gòu)化數(shù)據(jù),通過關(guān)系型數(shù)據(jù)庫(kù)依據(jù)細(xì)分屬性進(jìn)行水平切 分后分庫(kù)分表存儲(chǔ)與處理。
3. 如權(quán)利要求1所述的一種電力系統(tǒng)海量數(shù)據(jù)管理系統(tǒng),其特征在于,所述仿真數(shù)據(jù) 分布式存儲(chǔ)子系統(tǒng)由一個(gè)單一的元數(shù)據(jù)服務(wù)器和多個(gè)文件服務(wù)器組成,客戶端client訪 問主節(jié)點(diǎn); 在子系統(tǒng)中,每個(gè)文件拆成固定大小的塊chunk ;每一個(gè)塊都由master根據(jù)塊創(chuàng)建的 時(shí)間產(chǎn)生一個(gè)64位的chunk handle標(biāo)志;server在本地文件系統(tǒng)保存這些文件塊,并且 根據(jù)chunk handle和字節(jié)區(qū)間,通過操作系統(tǒng)文件系統(tǒng)讀寫這些塊數(shù)據(jù)。
4. 如權(quán)利要求1所述的一種電力系統(tǒng)海量數(shù)據(jù)管理系統(tǒng),其特征在于,所述海量仿真 數(shù)據(jù)處理子系統(tǒng)對(duì)于數(shù)據(jù)的切分包括垂直切分和水平切分; 所述垂直切分為把不同格式的數(shù)據(jù),存儲(chǔ)到不同的數(shù)據(jù)庫(kù); 所述水平切分為把相同的數(shù)據(jù)格式的數(shù)據(jù),存儲(chǔ)到不同的數(shù)據(jù)庫(kù)。
5. 如權(quán)利要求1所述的一種電力系統(tǒng)海量數(shù)據(jù)管理系統(tǒng),其特征在于,所述數(shù)據(jù)訪問 層用于接受用戶接入,等待用戶輸入,對(duì)輸入語句進(jìn)行輸出轉(zhuǎn)換和輸入拆分,并保存拆分信 息; 所述數(shù)據(jù)管理層負(fù)責(zé)調(diào)用底層接口,通過傳遞參數(shù)來進(jìn)行管理;并接受數(shù)據(jù)訪問層提 取的輸入信息,調(diào)用底層接口,獲得所需數(shù)據(jù); 所述數(shù)據(jù)存儲(chǔ)層用于與操作系統(tǒng)對(duì)接,調(diào)用底層文件接口對(duì)文件進(jìn)行操作。
6. -種電力系統(tǒng)海量數(shù)據(jù)使用方法,其特征在于,所述方法包括仿真數(shù)據(jù)分布式存儲(chǔ) 子系統(tǒng)數(shù)據(jù)處理方法和海量仿真數(shù)據(jù)處理子系統(tǒng)處理方法。
7. 如權(quán)利要求6所述的一種電力系統(tǒng)海量數(shù)據(jù)使用方法,其特征在于,所述仿真數(shù)據(jù) 分布式存儲(chǔ)子系統(tǒng)數(shù)據(jù)處理方法包括 (1)寫入過程; (1. 1)客戶端向元數(shù)據(jù)服務(wù)器發(fā)送查找命令,檢查所要?jiǎng)?chuàng)建文件的父目錄下是否已有 該文件名目錄項(xiàng),元數(shù)據(jù)服務(wù)器通過查詢B+樹檢查是否有并返回結(jié)果; (1. 2)若此文件名不存在,客戶端向元數(shù)據(jù)服務(wù)器發(fā)送信息在該目錄下創(chuàng)建文件,指定 文件名以及該文件的副本數(shù),元數(shù)據(jù)服務(wù)器在名字空間中添加該文件名目錄項(xiàng),并向客戶 端返回該文件對(duì)應(yīng)的文件句柄,該文件句柄代表這個(gè)文件; (1. 3)客戶端準(zhǔn)備向文件的某偏移量寫入數(shù)據(jù),先算得該偏移量位于第幾個(gè)server, 向元數(shù)據(jù)服務(wù)器發(fā)送定位命令創(chuàng)建該偏移量對(duì)應(yīng)的chunk ; (1. 4)元數(shù)據(jù)服務(wù)器為該chunk分配chunk號(hào),并優(yōu)選3個(gè)sever服務(wù)器來存放這個(gè) chunk,元數(shù)據(jù)服務(wù)器向被選中的3個(gè)server服務(wù)器發(fā)送寫入信息,被選中的3個(gè)server 服務(wù)器創(chuàng)建該chunk并返回成功; (1. 5)元數(shù)據(jù)服務(wù)器在接收到所有創(chuàng)建成功信息后向客戶端返回成功; (1. 6)客戶端向3個(gè)sever服務(wù)器寫數(shù)據(jù); (2)讀取過程; (2. 1)客戶端向元數(shù)據(jù)服務(wù)器發(fā)送查找命令獲取所要讀取文件的文件句柄; (2. 2)向元數(shù)據(jù)服務(wù)器獲取文件的布局信息; (2. 3)客戶端向元數(shù)據(jù)服務(wù)器發(fā)送命令索取所要讀取chunk的讀租約,若可分配租約, 則元數(shù)據(jù)服務(wù)器返回一個(gè)租約號(hào); (2. 4)客戶端根據(jù)位置信息,從中選擇一個(gè)chunk服務(wù)器,向其發(fā)送讀命令,開始讀取 據(jù); (2. 5)在讀取過程中,客戶端還可向另外兩個(gè)chunk服務(wù)器讀數(shù)據(jù),并發(fā)讀取提高吞吐 量; (2. 6)數(shù)據(jù)讀完后,客戶端向元數(shù)據(jù)服務(wù)器發(fā)送釋放命令,釋放租約。
8. 如權(quán)利要求7所述的一種電力系統(tǒng)海量數(shù)據(jù)使用方法,其特征在于, 所述寫租約為當(dāng)需要向chunk寫入數(shù)據(jù)時(shí),對(duì)應(yīng)的主chunk服務(wù)器查看是否擁有該 chunk的寫租約,沒有或已過期則嘗試向元數(shù)據(jù)服務(wù)器獲取或更新寫租約;該chunk正在被 復(fù)制到其他chunk服務(wù)器或者已經(jīng)分配寫租約或讀租約,則返回失敗,否則返回成功并且 chunk的版本號(hào)增一; 讀租約為在客戶端需要讀取某個(gè)chunk的數(shù)據(jù)時(shí),獲取這個(gè)chunk的讀租約,該chunk 沒有分配寫租約而且數(shù)據(jù)已全部寫入磁盤,則返回成功,否則返回失敗。
9. 如權(quán)利要求6所述的一種電力系統(tǒng)海量數(shù)據(jù)使用方法,其特征在于,所述步驟(2. 2) 中布局信息組成文件的各個(gè)chunk ;信息的列表,每一項(xiàng)包含偏移量、chunk號(hào)、版本號(hào)和位 置信息,位置信息標(biāo)注chunk所在server服務(wù)器內(nèi)位置。
10. 如權(quán)利要求6所述的一種電力系統(tǒng)海量數(shù)據(jù)使用方法,其特征在于,所述海量仿真 數(shù)據(jù)處理子系統(tǒng)處理方法包括 (10. 1)系統(tǒng)運(yùn)行,進(jìn)行初始化,讀入配置文件; (10. 2)依照配置文件中的信息,找到對(duì)應(yīng)位置,加載底層數(shù)據(jù)文件; (10. 3)如底層文件出錯(cuò),系統(tǒng)做出相應(yīng)的判斷,不能修正則直接退出,能夠修正則繼續(xù) 運(yùn)行;如文件不存在,創(chuàng)建所需的字典文件和數(shù)據(jù)文件以及其索引文件; (10. 4)對(duì)字典文件進(jìn)行初始化并寫入頭部信息和root節(jié)點(diǎn)的信息,數(shù)據(jù)文件初始化 文件metainfo信息并寫入,索引文件初始化頭部信息并寫入; (10. 5)系統(tǒng)加載數(shù)據(jù)訪問所需要的表信息文件,判斷所需要的信息文件是否可打開, 如沒有,創(chuàng)建一個(gè)空文件,等待用戶手動(dòng)輸入,如沒有表的信息,而用戶對(duì)表進(jìn)行了操作,直 接返回錯(cuò)誤的提示,提示用戶錯(cuò)誤,如用戶輸入了表的信息文件,系統(tǒng)會(huì)對(duì)表信息文件進(jìn)行 處理,保存相應(yīng)的數(shù)據(jù),標(biāo)記需要進(jìn)行轉(zhuǎn)換的屬性; (10. 5)系統(tǒng)掛起,繼續(xù)等待輸入信息,對(duì)輸入信息進(jìn)行提取,對(duì)提取的信息輸入到管理 對(duì)象,進(jìn)行底層轉(zhuǎn)換,對(duì)轉(zhuǎn)換的信息進(jìn)一步加工,由訪問層對(duì)SQL語句進(jìn)行拆解,拆分SQL語 言到語句中的屬性轉(zhuǎn)到對(duì)應(yīng)的表上進(jìn)行操作; (10. 6)循環(huán)等待輸入,如中間有錯(cuò)誤,程序會(huì)異常終止,并且提示錯(cuò)誤;否則等待用戶 正常輸入結(jié)束符,然后程序終止。
【文檔編號(hào)】G06F17/30GK104516967SQ201410820038
【公開日】2015年4月15日 申請(qǐng)日期:2014年12月25日 優(yōu)先權(quán)日:2014年12月25日
【發(fā)明者】何春江, 陳勇, 裘微江, 郭中華, 周智強(qiáng), 嚴(yán)劍峰, 劉欣 申請(qǐng)人:國(guó)家電網(wǎng)公司, 中國(guó)電力科學(xué)研究院