張 逸,楊洪耕
(1.福建省電力有限公司電力科學(xué)研究院,福建 福州 350007;2.四川大學(xué) 電氣信息學(xué)院,四川 成都 610065)
隨著電能質(zhì)量監(jiān)測(cè)系統(tǒng)規(guī)模的不斷擴(kuò)大,缺乏標(biāo)準(zhǔn)統(tǒng)一的電能質(zhì)量數(shù)據(jù)存儲(chǔ)體系所造成的監(jiān)測(cè)數(shù)據(jù)管理困難問題越發(fā)嚴(yán)重。IEEE 1159.3標(biāo)準(zhǔn)中提出的電能質(zhì)量數(shù)據(jù)交換格式PQDIF(Power Quality Data Interchange Format)[1]完全獨(dú)立于監(jiān)測(cè)設(shè)備的軟硬件,不僅能較好地解決多數(shù)據(jù)源數(shù)據(jù)兼容問題,還可以實(shí)現(xiàn)電能質(zhì)量物理屬性的多角度觀察功能,符合電能質(zhì)量監(jiān)測(cè)技術(shù)的發(fā)展需要[2-3],因此被普遍作為電能質(zhì)量監(jiān)測(cè)系統(tǒng)中監(jiān)測(cè)數(shù)據(jù)交換的標(biāo)準(zhǔn)格式[3-4]。
目前電能質(zhì)量監(jiān)測(cè)系統(tǒng)普遍采用2層式架構(gòu)[5-7]。在此架構(gòu)下,監(jiān)測(cè)主站按周期采用FTP等協(xié)議直接召喚各監(jiān)測(cè)裝置生成的PQDIF文件[8],并完成隨后的文件解析、數(shù)據(jù)分析、儲(chǔ)存和發(fā)布等工作。與設(shè)置區(qū)域子站的3層結(jié)構(gòu)相比,2層式架構(gòu)結(jié)構(gòu)簡(jiǎn)單,便于管理,且減少了1層設(shè)備的建設(shè)投資和維護(hù)費(fèi)用,經(jīng)濟(jì)性更好,但也存在監(jiān)測(cè)主站負(fù)擔(dān)重的問題。隨著電能質(zhì)量監(jiān)測(cè)系統(tǒng)建設(shè)工作的推進(jìn),監(jiān)測(cè)點(diǎn)的數(shù)量持續(xù)增加,某些地區(qū)的監(jiān)測(cè)系統(tǒng)已包含數(shù)千個(gè)監(jiān)測(cè)點(diǎn)[5-6]。監(jiān)測(cè)裝置周期性地為每個(gè)監(jiān)測(cè)點(diǎn)生成一個(gè)PQDIF文件,這就意味著監(jiān)測(cè)主站需要同時(shí)解析數(shù)千個(gè)PQDIF文件。這種數(shù)據(jù)文件海量化的趨勢(shì)已經(jīng)給傳統(tǒng)的基于串行編程方式設(shè)計(jì)的解析程序帶來了很大困難,其中最顯著的問題是解析時(shí)間過長(zhǎng)、大量資源被占用從而導(dǎo)致監(jiān)測(cè)主站長(zhǎng)時(shí)間無法正常響應(yīng)用戶請(qǐng)求,甚至造成主站系統(tǒng)崩潰。目前國(guó)內(nèi)外文獻(xiàn)中尚無對(duì)上述問題的研究,因此迫切需要一種針對(duì)海量PQDIF文件的快速解析方案。
隨著計(jì)算機(jī)硬件技術(shù)的發(fā)展,傳統(tǒng)的面向單核的串行編程技術(shù)已逐漸被基于多核多線程模式的并行編程技術(shù)所取代[9]。作為實(shí)現(xiàn)高速計(jì)算的一種重要途徑,并行編程技術(shù)為以上問題提供了一種全新的解決方案。
基于上述情況,本文提出了一種針對(duì)海量PQDIF文件的快速解析方案。針對(duì)傳統(tǒng)方案中需要重復(fù)解析相同數(shù)據(jù)源的情況,提出了3種可行方法以快速判斷通道序列定義是否改變,僅解析改變了的數(shù)據(jù)源記錄;采用并行編程和緩存池技術(shù),實(shí)現(xiàn)了利用多線程的海量觀測(cè)值記錄并行解析。通過分析在不同CPU核數(shù)、不同PQDIF文件數(shù)量情況下的解析耗時(shí)證明了此方案的實(shí)用性。目前,本文方案已在四川電能質(zhì)量一體化數(shù)據(jù)平臺(tái)中成功應(yīng)用。
PQDIF文件結(jié)構(gòu)分為物理層和邏輯層。物理層結(jié)構(gòu)定義了基本和復(fù)雜的數(shù)據(jù)類型在文件中的構(gòu)造形式,邏輯層結(jié)構(gòu)定義了電能質(zhì)量數(shù)據(jù)用物理層數(shù)據(jù)的詮釋方式。
從物理結(jié)構(gòu)上看,PQDIF文件由一系列的記錄所組成,每個(gè)記錄均包含記錄頭和記錄體。記錄頭中包括記錄類型、大小以及指向下一個(gè)記錄的鏈接。記錄體由集合、標(biāo)量和向量這3種類型元素組成:集合可包含標(biāo)量、向量,還可以包含集合;標(biāo)量指特定物理類型的單值;向量為任意大小的數(shù)列[1]。
PQDIF文件中,數(shù)據(jù)源記錄和觀測(cè)值記錄是最重要的2種記錄,兩者相互關(guān)聯(lián),前者為后者提供測(cè)量值所對(duì)應(yīng)的電能質(zhì)量指標(biāo)類型、單位以及相位等信息,后者根據(jù)前者中對(duì)應(yīng)的定義保存實(shí)際測(cè)量值。在電能質(zhì)量監(jiān)測(cè)系統(tǒng)中,監(jiān)測(cè)裝置投入實(shí)際運(yùn)行后,主站一般也僅解析其上傳的PQDIF文件中的數(shù)據(jù)源記錄和觀測(cè)值記錄。
傳統(tǒng)PQDIF文件解析方案一般直接調(diào)用Electrotek Concepts公司開發(fā)的PQDIF COM(Component Object Model,組件對(duì)象模型),將目前版本pqdcom4.dll注冊(cè)并導(dǎo)入后,即可利用已有的應(yīng)用程序編程接口函數(shù)解析文件,解析單個(gè)PQDIF文件的流程圖如圖1所示。
圖1 利用PQDIF COM解析單個(gè)PQDIF文件流程圖Fig.1 Flowchart of single PQDIF file parsing by PQDIF COM
傳統(tǒng)的利用PQDIF COM的解析方案(下文中簡(jiǎn)稱傳統(tǒng)方案)的優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,缺點(diǎn)包括執(zhí)行速度較慢、編碼不靈活、僅支持Windows 32位操作系統(tǒng)、處理大文件時(shí)內(nèi)存占用大等[3,10]。最關(guān)鍵的是,PQDIF COM自身未提供針對(duì)解析多個(gè)PQDIF文件的優(yōu)化方法,只能循環(huán)重復(fù)單個(gè)文件的解析過程,逐一解析每個(gè)文件。
目前,四川電能質(zhì)量一體化數(shù)據(jù)平臺(tái)(下文中簡(jiǎn)稱平臺(tái))中已包含343個(gè)監(jiān)測(cè)點(diǎn),監(jiān)測(cè)裝置每天為每個(gè)監(jiān)測(cè)點(diǎn)生成1個(gè)文件,文件中包括暫態(tài)事件數(shù)據(jù)和1 d內(nèi)按1 min時(shí)間間隔保存的統(tǒng)計(jì)數(shù)據(jù)(最大值、最小值、平均值、概率95值,諧波統(tǒng)計(jì)到50次),每個(gè)文件平均大小約為3 MB。
考慮到某些監(jiān)測(cè)系統(tǒng)已包含數(shù)千個(gè)監(jiān)測(cè)點(diǎn),筆者利用傳統(tǒng)方案測(cè)試解析1500個(gè)PQDIF文件,所有文件均來自平臺(tái)中所有監(jiān)測(cè)點(diǎn)不同天的實(shí)際監(jiān)測(cè)數(shù)據(jù)。測(cè)試服務(wù)器硬件條件為4核2.50 GHz Xeon E5420,內(nèi)存4 GB。由于服務(wù)器負(fù)載變化,導(dǎo)致每次解析耗時(shí)有所不同,因此采用K次最優(yōu)測(cè)量方法[11]得到解析時(shí)間(第4節(jié)中也采用同樣的測(cè)量方法),測(cè)試結(jié)果如圖2所示。由于數(shù)據(jù)庫(kù)存儲(chǔ)時(shí)間與所選用的數(shù)據(jù)庫(kù)引擎、數(shù)據(jù)庫(kù)設(shè)計(jì)以及存儲(chǔ)策略有關(guān),故未計(jì)入總耗時(shí)中。
圖2 傳統(tǒng)方案解析耗時(shí)Fig.2 Time consumption of traditional parsing schemes
由測(cè)試結(jié)果可知,傳統(tǒng)方案耗時(shí)大約為0.5 h(1 750301 ms),實(shí)際情況中需考慮存儲(chǔ)數(shù)據(jù)庫(kù)的時(shí)間,耗時(shí)將更長(zhǎng)。這將導(dǎo)致監(jiān)測(cè)主站長(zhǎng)時(shí)間無法響應(yīng)用戶請(qǐng)求,而且測(cè)試過程中也有系統(tǒng)崩潰的情況出現(xiàn),因此,傳統(tǒng)方案已經(jīng)無法適應(yīng)目前電能質(zhì)量監(jiān)測(cè)系統(tǒng)中解析海量PQDIF文件的需求。
針對(duì)傳統(tǒng)方案的缺點(diǎn),本文方案沒有使用PQDIF COM,而是利用標(biāo)準(zhǔn)中提供的C語(yǔ)言頭文件[1],采用直接編碼的方式,自行編寫解析方法。其優(yōu)勢(shì)包括內(nèi)存使用效率高、執(zhí)行速度快、平臺(tái)通用性強(qiáng)、可方便地進(jìn)入方法內(nèi)部調(diào)試、便于軟件的升級(jí)與維護(hù)等,更重要的是此方案編程靈活[3],便于程序的優(yōu)化設(shè)計(jì)。以下就分別從兩方面針對(duì)海量PQDIF文件解析進(jìn)行優(yōu)化。
在解析PQDIF文件中各序列實(shí)例的數(shù)據(jù)時(shí),需要先獲得其在數(shù)據(jù)源記錄中對(duì)應(yīng)的標(biāo)簽值組合,從而得到此數(shù)據(jù)對(duì)應(yīng)的電能質(zhì)量指標(biāo)類型(如圖1所示)。在實(shí)際已建成的電能質(zhì)量監(jiān)測(cè)系統(tǒng)中,一般通過監(jiān)測(cè)裝置接入規(guī)范規(guī)定了裝置需采集的指標(biāo)類型,故數(shù)據(jù)源記錄相對(duì)固定,而且裝置投入正常運(yùn)行后,每天生成文件中數(shù)據(jù)源記錄的通道序列定義也應(yīng)完全相同,因此,預(yù)先構(gòu)造通道序列定義表(以下簡(jiǎn)稱定義表)保存已知的定義。在解析程序初始化時(shí),將定義表讀入內(nèi)存,隨后對(duì)裝置上傳文件中通道序列定義是否改變進(jìn)行快速判斷,如果未改變,則直接利用內(nèi)存中的定義表得到序列實(shí)例對(duì)應(yīng)的指標(biāo)類型,僅在有變化的情況下才重新解析數(shù)據(jù)源記錄,更新定義表,從而避免重復(fù)解析相同的數(shù)據(jù)源記錄,減少了解析耗時(shí)。
新型監(jiān)測(cè)裝置接入時(shí),預(yù)先解析數(shù)據(jù)源記錄,得到每個(gè)序列定義的6種標(biāo)簽組合(如圖1中所示),并唯一地確定序列定義的指標(biāo)類型,保存在定義表中??紤]到不同類型裝置的通道序列定義可能不同,故需在表中保存裝置類型標(biāo)識(shí),也可通過在監(jiān)測(cè)裝置接入規(guī)范中強(qiáng)制規(guī)定數(shù)據(jù)源記錄形式來解決,但此方法通用性稍差。定義表如表1所示。
表1 通道序列定義表Tab.1 List of channel series definition
PQDIF文件中每個(gè)記錄的記錄頭中均保存有1個(gè)校驗(yàn)和(32 bit的循環(huán)冗余碼校驗(yàn))來保證物理結(jié)構(gòu)的正確性和完整性[1],2個(gè)完全相同的記錄體的校驗(yàn)和相同,故可利用校驗(yàn)和來快速判斷數(shù)據(jù)源記錄是否變化,但存在個(gè)別裝置在除通道序列定義外的其他信息中利用tagEffective標(biāo)簽值表示數(shù)據(jù)源生效時(shí)間或在tagNameDS標(biāo)簽中保存監(jiān)測(cè)點(diǎn)名稱等情況,將造成數(shù)據(jù)源記錄校驗(yàn)和變化。此時(shí),可通過計(jì)算tagChannelDefns及隨后的集合數(shù)據(jù)塊的校驗(yàn)和來判斷通道序列定義是否有改變。此時(shí)應(yīng)注意,如果是tagNameDS這類向量的數(shù)列大小發(fā)生變化(如監(jiān)測(cè)點(diǎn)名稱長(zhǎng)度變化),將會(huì)導(dǎo)致其后集合在記錄體中的相對(duì)地址發(fā)生偏移(即link.linkElement值改變),故此時(shí)需減去偏移量后再計(jì)算校驗(yàn)和。
因此,針對(duì)如何快速判斷通道序列定義是否發(fā)生變化,有以下3種可行的方法。
a.在監(jiān)測(cè)系統(tǒng)裝置接入規(guī)范中規(guī)定只有當(dāng)數(shù)據(jù)源記錄需要改變時(shí),裝置才在上傳的文件中包含數(shù)據(jù)源記錄。
b.規(guī)范各裝置上傳的數(shù)據(jù)源記錄的內(nèi)容(不包含隨時(shí)間或監(jiān)測(cè)點(diǎn)變化的信息),通過比較記錄頭中的校驗(yàn)和快速判斷數(shù)據(jù)源記錄是否改變。
c.無需對(duì)監(jiān)測(cè)裝置進(jìn)行規(guī)范,對(duì)數(shù)據(jù)源記錄進(jìn)行初步解析得到tagChannelDefns及其后的集合數(shù)據(jù)塊,將其中LinkElement值減去偏移量后計(jì)算數(shù)據(jù)塊校驗(yàn)和,比較判斷其中定義是否發(fā)生變化。
3種方法解析耗時(shí)和實(shí)現(xiàn)復(fù)雜程度依次增加,但通用性也隨之提高,可根據(jù)監(jiān)測(cè)系統(tǒng)實(shí)施的實(shí)際情況進(jìn)行選擇,本方案采用方法c。
目前,1個(gè)PQDIF文件中通常包含數(shù)個(gè)觀測(cè)值記錄,考慮到時(shí)間序列的差異,一般分為除閃變外的穩(wěn)態(tài)統(tǒng)計(jì)數(shù)據(jù)(諧波、電壓偏差、三相不平衡等)、閃變相關(guān)數(shù)據(jù)(電壓波動(dòng)、短時(shí)閃變和長(zhǎng)時(shí)閃變)以及暫態(tài)事件數(shù)據(jù)(電壓暫降、短時(shí)中斷等)3類記錄,以便共用時(shí)間序列,節(jié)約存儲(chǔ)空間。由于各觀測(cè)值記錄序列實(shí)例之間沒有數(shù)據(jù)依賴關(guān)系,因此可獨(dú)立并行解析。并行模式中,并行數(shù)據(jù)的粒度選擇非常重要,其與領(lǐng)域的數(shù)據(jù)特征和算法的數(shù)據(jù)依賴關(guān)系密切,同時(shí)要權(quán)衡普適性和實(shí)現(xiàn)難度[12]。方案設(shè)計(jì)初期曾考慮參考文獻(xiàn)[13]中并行解析電力系統(tǒng)暫態(tài)數(shù)據(jù)交換通用格式(COMTRADE)文件的數(shù)據(jù)分塊方法,將所有觀測(cè)值記錄平均分成固定大小的數(shù)據(jù)塊交由各線程獨(dú)立解析,并部署專門的線程對(duì)塊邊緣進(jìn)行合并解析,此方法并行粒度高,且各線程負(fù)載較均衡。但測(cè)試后發(fā)現(xiàn),由于PQDIF結(jié)構(gòu)較COMTRADE復(fù)雜很多,數(shù)據(jù)塊邊緣合并困難,不但易出錯(cuò),而且耗時(shí)較長(zhǎng),甚至出現(xiàn)解析線程等待邊緣合并完成的情況,造成了額外的同步等待耗時(shí),而且,專門設(shè)置邊緣解析線程也較浪費(fèi)系統(tǒng)資源。因此,本方案直接選擇觀測(cè)值記錄整體作為并行數(shù)據(jù)粒度,雖然對(duì)于少量文件,并行程度較低,但針對(duì)海量文件,各線程之間負(fù)載的細(xì)微差異基本可以忽略,而且程序?qū)崿F(xiàn)簡(jiǎn)單,不易出錯(cuò)。由于時(shí)間序列解析在觀測(cè)值記錄內(nèi)部解析過程中進(jìn)行,因此,不同類型數(shù)據(jù)的采集時(shí)間間隔差異并不影響解析效率。并行解析原理圖見圖3。
圖3 多線程并行解析觀測(cè)值記錄原理圖Fig.3 Schematic diagram of multi-threading parallel parsing of observation records
本文方案專門部署一個(gè)PQDIF文件讀取線程FRT(File Reading Thread),其與觀測(cè)值記錄解析線程 OPT(Observation Parsing Thread)形成流水線并行,并使用任務(wù)池協(xié)調(diào)其速度差異,由于讀取文件,解析數(shù)據(jù)源記錄,并分解出各觀測(cè)值記錄的耗時(shí)僅為解析觀測(cè)值記錄耗時(shí)的8%左右,因此,此優(yōu)化機(jī)制能為OPT提供持續(xù)不斷的數(shù)據(jù)。
FRT分解得到各觀測(cè)值記錄后,填入任務(wù)池中,隨后繼續(xù)讀取下一個(gè)文件。這里有2種方法可供選擇:第1種是FRT將各觀測(cè)值記錄的所屬文件地址和記錄絕對(duì)地址索引(前一記錄頭中的linkNextRecord值)填入任務(wù)池中,各OPT根據(jù)地址和索引讀取記錄;第2種是FRT直接將分解出的未解壓的觀測(cè)值記錄數(shù)據(jù)塊填入任務(wù)池中。測(cè)試后發(fā)現(xiàn),第1種方法雖然減少了任務(wù)池的內(nèi)存占用,但各線程并行讀取文件,將導(dǎo)致訪問文件的位置有很強(qiáng)的隨機(jī)性,無法利用文件系統(tǒng)的預(yù)取優(yōu)化,降低了磁盤的訪問效率;第2種方法中每個(gè)觀測(cè)值記錄解壓前的大小僅為100 KB左右,并不會(huì)大量占用內(nèi)存。綜合考慮,本文采用第2種方法。
OPT循環(huán)訪問任務(wù)池,取走待解析的觀測(cè)值記錄,解壓后獨(dú)立并行解析。為了減少有限存儲(chǔ)帶寬的競(jìng)爭(zhēng),將載入內(nèi)存的定義表拷貝到各線程局部變量中。OPT完成解析觀測(cè)值記錄后并不直接將結(jié)果存入數(shù)據(jù)庫(kù)中,而是將其放入數(shù)據(jù)緩存池中,待緩存數(shù)據(jù)達(dá)到一定容量后,由專門的數(shù)據(jù)存儲(chǔ)線程DST(Data Saving Thread)一次性批量插入數(shù)據(jù)庫(kù)中,這樣不但避免了多個(gè)OPT頻繁操作數(shù)據(jù)庫(kù)造成的堵塞,還能夠更好地發(fā)揮批量索引的插入優(yōu)勢(shì)。
根據(jù)四川電能質(zhì)量一體化數(shù)據(jù)平臺(tái)采用Windows Server 2008操作系統(tǒng)的實(shí)際情況,本文方案基于微軟最新的.Net Framework4.0(以下簡(jiǎn)稱“.NET 4.0”)編程模型,選擇Visual Studio 2010作為編程開發(fā)工具,它們提供了新的運(yùn)行時(shí)、新的并行擴(kuò)展類以及新的診斷工具,增強(qiáng)了對(duì)并行編程的支持,簡(jiǎn)化了并行開發(fā)[14]。解決方案采用微軟推薦最適合.NET環(huán)境的C#語(yǔ)言作為并行解析項(xiàng)目的開發(fā)語(yǔ)言,為了利用標(biāo)準(zhǔn)中提供的C頭文件[1],利用C++/CLI編寫底層PQDIF文件解析函數(shù),將其作為類庫(kù)項(xiàng)目包含在整體解決方案中,以便與C#項(xiàng)目同時(shí)調(diào)試,并引用其中定義的各PQDIF邏輯結(jié)構(gòu)。單個(gè)通道定義結(jié)構(gòu)體聲明代碼如下:
預(yù)先構(gòu)造的定義表可利用數(shù)據(jù)庫(kù)或XML文檔存儲(chǔ)。解析程序初始化時(shí),將其載入內(nèi)存中并轉(zhuǎn)化為哈希表結(jié)構(gòu),可利用Hashtable類實(shí)現(xiàn)。利用裝置類型ID、通道序號(hào)以及序列索引組合出唯一的Key值,隨后可通過Key值快速檢索對(duì)應(yīng)的指標(biāo)類型。
第2.2節(jié)提到的3種方法中,前2種方法的實(shí)現(xiàn)較為簡(jiǎn)單,主要功能C++/CLI代碼如下:
方案c實(shí)現(xiàn)較復(fù)雜,具體流程圖如圖4所示,在裝置初次接入時(shí)需要用同樣方法計(jì)算并保存校驗(yàn)和以及tagChannelDefns集合中的linkElement值。
圖4 方案c實(shí)現(xiàn)流程圖Fig.4 Implementation flowchart of method c
在.NET 4.0中的并行編程是依賴任務(wù)并行庫(kù)TPL(Task Parallel Library)實(shí)現(xiàn)的,其最基本的執(zhí)行單元是任務(wù),代表了一個(gè)可以被計(jì)算機(jī)并行執(zhí)行的異步操作[14]。TPL負(fù)責(zé)創(chuàng)建并管理線程來執(zhí)行任務(wù),以下C#代碼創(chuàng)建并運(yùn)行一個(gè)觀測(cè)值記錄解析任務(wù):
為了確保每個(gè)線程都能夠正確地訪問共享存儲(chǔ)區(qū)(任務(wù)池和數(shù)據(jù)緩存池)內(nèi)的數(shù)據(jù),傳統(tǒng)方法需要在程序中采用封鎖機(jī)制[15],不但編程復(fù)雜,而且增加了出錯(cuò)風(fēng)險(xiǎn),降低了程序效率。本方案采用.Net 4.0新增的System.Collections.Concurrent命名空間中提供的線程安全集合類構(gòu)造共享存儲(chǔ)區(qū),可以方便地并發(fā)訪問其中的數(shù)據(jù)[16]。利用線程安全的先進(jìn)先出隊(duì)列類ConcurrentQueue實(shí)現(xiàn)任務(wù)池的主要C#代碼如下:
方案中還利用ManualResetEventSlim類協(xié)調(diào)OPT與FRT,以免寫入的觀測(cè)值記錄超過任務(wù)池預(yù)設(shè)大?。焕肨ask類的WaitAll()方法保證所有OPT均完成后結(jié)束解析;利用AggregateException類處理并行解析過程中的異常;使用SqlBulkCopy類實(shí)現(xiàn)大批量數(shù)據(jù)快速導(dǎo)入數(shù)據(jù)庫(kù)等,篇幅所限,在此就不全部展開詳述。
筆者將本文所提方案在四川電能質(zhì)量一體化數(shù)據(jù)平臺(tái)中應(yīng)用實(shí)施,并用現(xiàn)場(chǎng)PQDIF文件對(duì)方案實(shí)用性和可靠性進(jìn)行驗(yàn)證。測(cè)試平臺(tái)如表2所示。
表2 測(cè)試平臺(tái)軟硬件條件Tab.2 Software and hardware conditions of test platform
在與第1.2節(jié)中相同的測(cè)試條件下(4核服務(wù)器),本文方案與傳統(tǒng)方案解析耗時(shí)對(duì)比如圖5所示。
由圖5可見,本文方案相對(duì)傳統(tǒng)方案解析耗時(shí)明顯減少,并可隨著PQDIF文件數(shù)量的增加獲得更高的加速比,解析1500個(gè)文件的耗時(shí)可控制在5 min以內(nèi)(282306 ms)。
圖5 快速解析方案與傳統(tǒng)方案解析耗時(shí)對(duì)比Fig.5 Comparison of parsing time consumption between proposed scheme and traditional scheme
由測(cè)試結(jié)果可知,由于本文方案直接選擇觀測(cè)值記錄整體作為并行解析的數(shù)據(jù)粒度,因此可顯著提高存儲(chǔ)在觀測(cè)值記錄中的每種類型數(shù)據(jù)(包括穩(wěn)態(tài)數(shù)據(jù)和暫態(tài)數(shù)據(jù))的解析效率。各類型數(shù)據(jù)的解析耗時(shí)對(duì)比如表3所示。
表3 各類型電能質(zhì)量監(jiān)測(cè)數(shù)據(jù)解析耗時(shí)對(duì)比Tab.3 Comparison of parsing time consumption for different types of power quality monitoring data
表3中,某類型數(shù)據(jù)的解析耗時(shí)為1500個(gè)文件中此類數(shù)據(jù)解析耗時(shí)的總和,且解析耗時(shí)為觀測(cè)值記錄中各類型數(shù)據(jù)的解析時(shí)間,不包括數(shù)據(jù)源記錄的解析耗時(shí),均采用K次最優(yōu)測(cè)量方法得出;諧波類數(shù)據(jù)包括2~50次諧波電壓幅值(相角)、諧波電流幅值(相角)、諧波有功(無功)功率以及諧波電壓(電流)總畸變率;間諧波類數(shù)據(jù)包括前25個(gè)間諧波組電壓(電流)幅值;三相不平衡類數(shù)據(jù)包括正序(負(fù)序、零序)電壓(電流)值、電壓(電流)負(fù)序不平衡度;電壓波動(dòng)與閃變類數(shù)據(jù)包括:電壓波動(dòng)值、短(長(zhǎng))時(shí)閃變值。暫態(tài)類數(shù)據(jù)包括電壓暫降(升)事件有效值記錄、電壓暫降(升)事件波形采樣值記錄、短時(shí)中斷事件有效值(波形采樣值)記錄。
測(cè)試解析少量PQDIF文件時(shí),本文方案也可提高解析效率,但由于本文方案選取的并行粒度較大,少量文件的并行程度較低,影響了解析效率的提高。隨文件增多,解析效率的提高將更為顯著。少量文件的解析耗時(shí)對(duì)比如表4所示。
本文方案在不同核數(shù)服務(wù)器條件下的解析耗時(shí)對(duì)比如圖6所示。由圖6可見,隨著服務(wù)器CPU核數(shù)的增加,本文方案性能提升顯著。解析1500個(gè)文件時(shí),采用8核服務(wù)器的耗時(shí)(150 966 ms)相對(duì)4核服務(wù)器減少了約46.52%,因此,本文方案具有一定的可擴(kuò)展能力。
目前,基于本文方案的解析程序已在平臺(tái)中長(zhǎng)期穩(wěn)定運(yùn)行。程序每日凌晨自啟動(dòng)并解析主站采集的343個(gè)PQDIF文件,耗時(shí)約40 s,可滿足實(shí)際需要,且運(yùn)行過程中未發(fā)生服務(wù)器操作系統(tǒng)崩潰、內(nèi)存溢出等錯(cuò)誤,證明了本文方案的可靠性。
表4 解析少量PQDIF文件耗時(shí)對(duì)比Tab.4 Comparison of parsing time consumption between proposed scheme and traditional scheme for different PQDIF file quantities
圖6 不同CPU核數(shù)服務(wù)器條件下快速解析方案解析耗時(shí)對(duì)比測(cè)試結(jié)果Fig.6 Comparison of parsing time consumption among different CPU core quantities
本文提出一種海量PQDIF文件的快速解析方案,相對(duì)于傳統(tǒng)方案有以下幾點(diǎn)優(yōu)勢(shì):解析效率高,速度快;硬件可擴(kuò)展性強(qiáng);程序穩(wěn)定性高;軟件可維護(hù)性強(qiáng)。
目前此方案已有效應(yīng)用于四川電能質(zhì)量一體化數(shù)據(jù)平臺(tái)。實(shí)踐證明,此方案具有較高的實(shí)用性和可靠性。但值得注意的是,解析后數(shù)據(jù)存入數(shù)據(jù)庫(kù)的耗時(shí)也是相當(dāng)可觀的,因此,下一步將研究海量電能質(zhì)量數(shù)據(jù)的存儲(chǔ)策略。