基于緩存數(shù)據(jù)多線程處理的電力可靠性指標(biāo)快速計算方法
【專利摘要】本發(fā)明基于緩存數(shù)據(jù)多線程處理的電力可靠性指標(biāo)快速計算方法,其方法解決了電力可靠性指標(biāo)分析計算效率過低的問題。該方法包括:在內(nèi)存中創(chuàng)建數(shù)據(jù)緩存區(qū),按業(yè)務(wù)數(shù)據(jù)類型劃分,以管理單位、設(shè)備注冊年月或停電發(fā)生年月為主鍵建立數(shù)據(jù)塊;在每個數(shù)據(jù)塊中建立變更緩沖區(qū),記錄數(shù)據(jù)變更,并定時將變更緩沖區(qū)數(shù)據(jù)與基礎(chǔ)數(shù)據(jù)合并;將指標(biāo)計算所涉及的數(shù)據(jù)平均分配給多個線程進行基礎(chǔ)指標(biāo)計算,然后將每個線程的基礎(chǔ)指標(biāo)計算結(jié)果合并,計算各級管理單位可靠性綜合指標(biāo)。本發(fā)明采用多數(shù)據(jù)塊緩存業(yè)務(wù)數(shù)據(jù)、數(shù)據(jù)變更緩沖區(qū)和多線程處理的技術(shù)手段,提高了電力可靠性業(yè)務(wù)基礎(chǔ)數(shù)據(jù)檢索和計算效率,從而實現(xiàn)了電力可靠性指標(biāo)的快速計算。
【專利說明】基于緩存數(shù)據(jù)多線程處理的電力可靠性指標(biāo)快速計算方法
[0001]
【技術(shù)領(lǐng)域】
[0002]本發(fā)明涉及一種基于緩存數(shù)據(jù)多線程處理的電力可靠性指標(biāo)快速計算方法,主要針對電力可靠性指標(biāo)分析的信息化建設(shè)應(yīng)用領(lǐng)域。
【背景技術(shù)】
[0003]電網(wǎng)規(guī)模不斷擴大,電力可靠性指標(biāo)計算所涉及的基礎(chǔ)數(shù)據(jù)隨之快速增長,電力可靠性指標(biāo)計算響應(yīng)效率低下的問題突顯。同時,隨著電力可靠性管理業(yè)務(wù)在時效性方面的要求不斷提高,指標(biāo)計算效率與業(yè)務(wù)管理時效性要求兩者之間的矛盾越來越尖銳。
[0004]在海量基礎(chǔ)數(shù)據(jù)的條件下,電力可靠性指標(biāo)計算效率低下主要體現(xiàn)在從物理磁盤讀取基礎(chǔ)數(shù)據(jù)的速度較低。傳統(tǒng)的技術(shù)解決方案是利用業(yè)務(wù)空間時間定時(通常以天為單位)計算出可靠性指標(biāo)中間結(jié)果,當(dāng)用戶提交可靠性指標(biāo)計算請求時,基于指標(biāo)中間結(jié)果進行計算,可以降低計算時所讀取的數(shù)據(jù)量,提高計算響應(yīng)效率。
[0005]但是,上述傳統(tǒng)的技術(shù)解決方案應(yīng)用的前提條件是電力可靠性指標(biāo)計算所涉及的基礎(chǔ)數(shù)據(jù)產(chǎn)生后不再或極少發(fā)生變更。但在目前電力可靠性管理模式下,電力可靠性指標(biāo)計算所涉及到的基礎(chǔ)數(shù)據(jù)產(chǎn)生后仍會不斷地對其進行信息的補充完善,以滿足不同維度的電力可靠性指標(biāo)計算。此外,傳統(tǒng)的技術(shù)解決方案只能反映最后一次指標(biāo)中間結(jié)果計算完成前的可靠性水平,不能反映截止當(dāng)前時間電力可靠性水平,仍難以滿足電力可靠性管理業(yè)務(wù)在時效性方面的要求。
【發(fā)明內(nèi)容】
[0006]為了解決上述問題,本發(fā)明提供了一種基于緩存數(shù)據(jù)多線程處理的電力可靠性指標(biāo)快速計算方法,利用內(nèi)存中的數(shù)據(jù)讀取速度和多線程并行處理的技術(shù)手段,在海量基礎(chǔ)數(shù)據(jù)的條件下,提高了電力可靠性指標(biāo)計算的效率。
[0007]本發(fā)明的技術(shù)方案如下:
一種基于緩存數(shù)據(jù)多線程處理的電力可靠性指標(biāo)快速計算方法,其特征在于,該方法包括以下步驟:
(1)在內(nèi)存中創(chuàng)建數(shù)據(jù)緩存區(qū),按業(yè)務(wù)數(shù)據(jù)類型劃分,以管理單位、設(shè)備注冊年月或停電發(fā)生年月為主鍵建立數(shù)據(jù)塊,緩存基礎(chǔ)數(shù)據(jù);
(2)在每個數(shù)據(jù)塊中建立變更緩沖區(qū),記錄發(fā)生變更的數(shù)據(jù),并定時將變更緩沖區(qū)數(shù)據(jù)與數(shù)據(jù)塊中基礎(chǔ)數(shù)據(jù)合并,清空變更緩沖區(qū);
(3)根據(jù)用戶提交的可靠性指標(biāo)計算請求所輸入的條件,在數(shù)據(jù)緩存區(qū)中檢索參與計算的數(shù)據(jù)塊;
(4)根據(jù)系統(tǒng)當(dāng)前設(shè)定的最大線程數(shù),將檢索出參與計算的數(shù)據(jù)塊中數(shù)據(jù)平均切割成多組,并創(chuàng)建多個基礎(chǔ)指標(biāo)計算 線程和一個基礎(chǔ)指標(biāo)合并線程; (5)所有基礎(chǔ)指標(biāo)計算線程完成基礎(chǔ)指標(biāo)計算后,由基礎(chǔ)指標(biāo)合并線程將各基礎(chǔ)指標(biāo)計算線程計算出的基礎(chǔ)指標(biāo)結(jié)果進行合并,計算各級管理單位可靠性綜合指標(biāo)。
[0008]上述步驟(I)在內(nèi)存中創(chuàng)建數(shù)據(jù)緩存區(qū),緩存基礎(chǔ)數(shù)據(jù)包括以下步驟:
(Ia)按業(yè)務(wù)數(shù)據(jù)類型劃分,在數(shù)據(jù)緩存區(qū)中創(chuàng)建業(yè)務(wù)內(nèi)存對象,并初始化;初始化的信息包括指定對象數(shù)據(jù)來源、所需要讀取的字段、設(shè)定數(shù)據(jù)塊內(nèi)數(shù)據(jù)排序字段、抽取數(shù)據(jù)所用的過濾條件;
(Ib)從外部數(shù)據(jù)源讀取基礎(chǔ)數(shù)據(jù),同時按管理單位、注冊日期或停電時間進行排序,在內(nèi)存中形成原始數(shù)據(jù)記錄集;
(Ic)遍歷步驟(Ib)中形成的原始數(shù)據(jù)記錄集中的數(shù)據(jù),根據(jù)管理單位、設(shè)備注冊年月或停電發(fā)生年月新建數(shù)據(jù)塊,或?qū)?shù)據(jù)寫入已有的數(shù)據(jù)塊;
(Id)建立由管理單位、設(shè)備注冊年月或停電發(fā)生年月形成的主鍵與數(shù)據(jù)塊地址指針的數(shù)據(jù)塊列表。
[0009]上述步驟(I)中,所述的數(shù)據(jù)塊中基礎(chǔ)數(shù)據(jù)區(qū)內(nèi)部數(shù)據(jù)排序方式為:設(shè)備注冊數(shù)據(jù)按設(shè)備注冊日期排序,設(shè)備運行數(shù)據(jù)按停電開始時間排序。
[0010]上述步驟(2)在每個數(shù)據(jù)塊中建立數(shù)據(jù)變更緩沖區(qū),清空緩沖區(qū)包括以下步驟: (2a)在每個數(shù)據(jù)塊中建立數(shù)據(jù)變更緩沖區(qū),在變更緩沖區(qū)中創(chuàng)建三個列表分別為新增
列表、修改列表和刪除列表;
(2b)定時根據(jù)外部數(shù)據(jù)源提供的基礎(chǔ)數(shù)據(jù)變更信息,將發(fā)生變更的基礎(chǔ)數(shù)據(jù)按變更類型分別讀取至新增列表、修改列表和刪除列表;
(2c)定時將新增列表、修改列表和刪除列表中的數(shù)據(jù)與數(shù)據(jù)塊中基礎(chǔ)數(shù)據(jù)進行合并; (2d)清空新增列表、修改列表和刪除列表。
[0011]上述步驟(3)中,包括如下步驟:
(3a)從數(shù)據(jù)庫中獲取用戶提交的可靠性指標(biāo)計算請求,并將其轉(zhuǎn)換成篩選基礎(chǔ)數(shù)據(jù)條件的內(nèi)存對象;
(3b)遍歷所有業(yè)務(wù)內(nèi)存對象的數(shù)據(jù)塊,依據(jù)數(shù)據(jù)塊主鍵信息和指標(biāo)計算所涉及的起始時間篩選數(shù)據(jù)塊;
(3c)將篩選出的參與計算的數(shù)據(jù)塊通過地址指針的方式添加至計算數(shù)據(jù)塊列表中。
[0012]上述步驟(4)中,包括以下步驟:
(4a)根據(jù)系統(tǒng)當(dāng)前設(shè)定的最大線程數(shù)和計算數(shù)據(jù)塊列表中參與計算的基礎(chǔ)數(shù)據(jù)總記錄數(shù)確定數(shù)據(jù)組的數(shù)目,以及切割后每個數(shù)據(jù)組所含基礎(chǔ)數(shù)據(jù)的平均數(shù)量;
(4b)遍歷計算數(shù)據(jù)塊列表中所有數(shù)據(jù)塊,遍歷數(shù)據(jù)塊的同時創(chuàng)建基礎(chǔ)數(shù)據(jù)容量為步驟(4a)中所述平均數(shù)量的數(shù)據(jù)組,如果當(dāng)前數(shù)據(jù)塊中所包含的基礎(chǔ)數(shù)據(jù)量大于當(dāng)前數(shù)據(jù)組剩余容量時,則拆分數(shù)據(jù)塊中的基礎(chǔ)數(shù)據(jù)先將當(dāng)前數(shù)據(jù)組填充滿,再將剩余的基礎(chǔ)數(shù)據(jù)添加至新的數(shù)據(jù)組中;如果當(dāng)前數(shù)據(jù)塊中所包含的基礎(chǔ)數(shù)據(jù)量小于當(dāng)前數(shù)據(jù)組剩余容量時則不進行拆分,直接將其添加至當(dāng)前數(shù)據(jù)組中;
(4c)根據(jù)數(shù)據(jù)組的數(shù)量,創(chuàng)建多個基礎(chǔ)指標(biāo)計算線程,并形成基礎(chǔ)指標(biāo)計算任務(wù)列表;將每組數(shù)據(jù)提交至所創(chuàng)建的基礎(chǔ)指標(biāo)計算線程,且將線程對應(yīng)的基礎(chǔ)指標(biāo)計算任務(wù)狀態(tài)設(shè)置為計算中;
(4d)創(chuàng)建一個基礎(chǔ)指標(biāo)合并線程。[0013]上述步驟(5)中,包括以下步驟:
(5a)每個基礎(chǔ)指標(biāo)計算線程遍歷所處理的數(shù)據(jù)組中每一條基礎(chǔ)數(shù)據(jù),以及相應(yīng)數(shù)據(jù)塊中的變更緩沖區(qū)新增列表中的數(shù)據(jù),并根據(jù)篩選基礎(chǔ)數(shù)據(jù)條件的內(nèi)存對象判斷該條基礎(chǔ)數(shù)據(jù)是否參與計算,如果參與計算則將該條數(shù)據(jù)提交基礎(chǔ)指標(biāo)計算單元進行計算,計算結(jié)果存入基礎(chǔ)指標(biāo)結(jié)果列表中,如果不參與則處理下一條基礎(chǔ)數(shù)據(jù),直至該組數(shù)據(jù)全部處理完成;
(5b)每個基礎(chǔ)指標(biāo)計算線程完成后,將該線程對應(yīng)的計算任務(wù)狀態(tài)設(shè)置為完成;
(5c)遍歷基礎(chǔ)指標(biāo)計算任務(wù)列表中的任務(wù),判斷所有任務(wù)是否都已經(jīng)執(zhí)行完成,如果沒有全部完成則休眠I秒鐘再后執(zhí)行步驟(5b),如果全部完成則執(zhí)行步驟(5d);
(5d)遍歷基礎(chǔ)指標(biāo)結(jié)果列表中的每一條結(jié)果記錄,將同一單位的結(jié)果記錄中的基礎(chǔ)指標(biāo)進行合并,計算該管理單位的可靠性綜合指標(biāo),并將全部指標(biāo)結(jié)果寫入可靠性指標(biāo)結(jié)果列表中;
(5e)將可靠性指標(biāo)結(jié)果列表中的指標(biāo)結(jié)果寫入數(shù)據(jù)庫,反饋給用戶。
[0014]本發(fā)明所達到的有益效果:
本發(fā)明的方法通過多數(shù)據(jù)塊對基礎(chǔ)數(shù)據(jù)進行緩存,根據(jù)電力可靠性業(yè)務(wù)特點設(shè)計了緩存數(shù)據(jù)結(jié)構(gòu),提高了電力可靠性指標(biāo)計算時數(shù)據(jù)檢索的效率;并建立了基礎(chǔ)數(shù)據(jù)變更同步機制,設(shè)置變更緩沖區(qū),提高了變更數(shù)據(jù)同步的效率;指標(biāo)計算時采用基礎(chǔ)數(shù)據(jù)分組,利用多線程技術(shù)完成基礎(chǔ)指標(biāo)的計算,最后對多個基礎(chǔ)指標(biāo)結(jié)果進行合并,計算出滿足要的可靠性指標(biāo)結(jié)果,保證了電力可靠性指標(biāo)計算的速度。
[0015]本發(fā)明采用多數(shù)據(jù)塊緩存業(yè)務(wù)數(shù)據(jù)、數(shù)據(jù)變更緩沖區(qū)和多線程處理的技術(shù)手段,提高了電力可靠性業(yè)務(wù)基礎(chǔ)數(shù)據(jù) 檢索和計算效率,從而實現(xiàn)了電力可靠性指標(biāo)的快速計
笪
ο
【專利附圖】
【附圖說明】
[0016]圖1:本發(fā)明中的數(shù)據(jù)緩存區(qū)數(shù)據(jù)結(jié)構(gòu)圖;
圖2:本發(fā)明中各功能模塊協(xié)作關(guān)系圖;
圖3:本發(fā)明實施例中的緩存數(shù)據(jù)加載流程圖;
圖4:本發(fā)明實施例中的變更數(shù)據(jù)同步流程圖;
圖5:本發(fā)明實施例中的變更緩沖數(shù)據(jù)合并流程圖;
圖6:本發(fā)明實施例中的指標(biāo)計算請求處理流程圖;
圖7:本發(fā)明實施例中的指標(biāo)計算流程圖。
【具體實施方式】
[0017]下面結(jié)合附圖對本發(fā)明作進一步描述。以下實施例僅用于更加清楚地說明本發(fā)明的技術(shù)方案,而不能以此來限制本發(fā)明的保護范圍。
[0018]數(shù)據(jù)緩存區(qū)的數(shù)據(jù)結(jié)構(gòu)如圖1所示,在數(shù)據(jù)緩存區(qū)中按業(yè)務(wù)數(shù)據(jù)類型劃分,創(chuàng)建業(yè)務(wù)內(nèi)存對象。每個業(yè)務(wù)內(nèi)存對象包含:由屬性列表、源數(shù)據(jù)表、排序?qū)傩浴⑽ㄒ粯?biāo)識信息組成的對象基礎(chǔ)信息;由管理單位、設(shè)備注冊年月或停電發(fā)生年月為主鍵,數(shù)據(jù)塊地址指標(biāo)為值的鍵值對組成的數(shù)據(jù)塊列表;由基礎(chǔ)數(shù)據(jù)區(qū)和變更緩沖區(qū)組成的多個數(shù)據(jù)塊。[0019]其中:數(shù)據(jù)塊中的基礎(chǔ)數(shù)據(jù)區(qū)內(nèi)數(shù)據(jù)排序方式為:設(shè)備注冊數(shù)據(jù)按設(shè)備注冊日期排序,設(shè)備運行數(shù)據(jù)按停電開始時間排序;數(shù)據(jù)塊中的變更緩沖區(qū)包括新增列表、修改列表和刪除列表,分別用于記錄新增的基礎(chǔ)數(shù)據(jù)、屬性發(fā)生修改的基礎(chǔ)數(shù)據(jù)和被刪除的基礎(chǔ)數(shù)據(jù)。
[0020]本技術(shù)方案中除數(shù)據(jù)緩存區(qū)外,還包括數(shù)據(jù)加載模塊、數(shù)據(jù)更新模塊、指標(biāo)計算任務(wù)管理模塊和指標(biāo)計算模塊組成,各模塊協(xié)作關(guān)系如圖2所示。數(shù)據(jù)塊基礎(chǔ)數(shù)據(jù)區(qū)中的基數(shù)數(shù)據(jù)在啟動時由數(shù)據(jù)加載模塊統(tǒng)一加載,變更緩沖區(qū)中的數(shù)據(jù)由每個數(shù)據(jù)塊對應(yīng)的數(shù)據(jù)更新模塊定時讀取數(shù)據(jù)庫中的數(shù)據(jù)變更索引表記錄,根據(jù)發(fā)生變更的基礎(chǔ)數(shù)據(jù)主鍵從基礎(chǔ)數(shù)據(jù)表中讀取數(shù)據(jù)信息,并根據(jù)數(shù)據(jù)變更類型將基礎(chǔ)數(shù)據(jù)寫入新增列表、修改列表或刪除列表。數(shù)據(jù)更新模塊還定時啟動變更緩沖區(qū)數(shù)據(jù)與基礎(chǔ)數(shù)據(jù)區(qū)數(shù)據(jù)合并任務(wù),更新基礎(chǔ)數(shù)據(jù)區(qū)中,使之為最新的基礎(chǔ)數(shù)據(jù),并清空變更緩沖區(qū)。
[0021]指標(biāo)計算任務(wù)管理模塊負責(zé)從數(shù)據(jù)庫中獲取用戶提交的可靠性指標(biāo)計算請求,將請求所輸入的計算條件轉(zhuǎn)換成篩選基礎(chǔ)數(shù)據(jù)條件的內(nèi)存對象,遍歷所有業(yè)務(wù)數(shù)據(jù)內(nèi)存對象的數(shù)據(jù)塊,依據(jù)數(shù)據(jù)塊主鍵信息和指標(biāo)計算所涉及的起始時間篩選數(shù)據(jù)塊,并將符合條件的數(shù)據(jù)塊添加至計算數(shù)據(jù)塊列表中;然后,根據(jù)系統(tǒng)當(dāng)前設(shè)定的最大線程數(shù)和計算數(shù)據(jù)塊列表中參與計算的基礎(chǔ)數(shù)據(jù)總記錄數(shù)確定數(shù)據(jù)組的數(shù)目,以及切割后每個數(shù)據(jù)組所含基礎(chǔ)數(shù)據(jù)的平均數(shù)量,并切割計算數(shù)據(jù)塊列表中的數(shù)據(jù)塊,形成多個數(shù)據(jù)組;最后,根據(jù)數(shù)據(jù)組的數(shù)量,創(chuàng)建多個基礎(chǔ)指標(biāo)計算線程,并形成基礎(chǔ)指標(biāo)計算任務(wù)列表。將每組數(shù)據(jù)提交至所創(chuàng)建的基礎(chǔ)指標(biāo)計算線程,且將線程對應(yīng)的基礎(chǔ)指標(biāo)計算任務(wù)狀態(tài)設(shè)置為計算中,同時創(chuàng)建一個基礎(chǔ)指標(biāo)合并線程。
[0022]指標(biāo)計算模塊負責(zé)提供基礎(chǔ)指標(biāo)計算和基礎(chǔ)指標(biāo)合并業(yè)務(wù)邏輯,根據(jù)指標(biāo)計算任務(wù)管理模塊所創(chuàng)建的多個基礎(chǔ)指標(biāo)計算線程和基礎(chǔ)指標(biāo)合并線程完成可靠性指標(biāo)計算,并輸出結(jié)果。
[0023]以下結(jié)合附圖3至圖6,對本發(fā)明的技術(shù)方案進行清楚、完整的描述。圖3示意了本發(fā)明實施例中的緩存數(shù)據(jù)加載流程,包括如下步驟:
步驟301:根據(jù)配置文件,生成需要進行數(shù)據(jù)緩存的業(yè)務(wù)數(shù)據(jù)類型列表;
步驟302:獲取業(yè)務(wù)數(shù)據(jù)類型列表迭代器;
步驟303:判斷業(yè)務(wù)數(shù)據(jù)類型列表迭代器中是否包含下一個業(yè)務(wù)數(shù)據(jù)類型,如果有則執(zhí)行步驟304,如果沒有則緩存數(shù)據(jù)加載結(jié)束;
步驟304:創(chuàng)建業(yè)務(wù)內(nèi)存對象,建立對象基礎(chǔ)信息區(qū)和空的數(shù)據(jù)塊列表;
步驟305:初始化業(yè)務(wù)內(nèi)存對象基礎(chǔ)信息,包括:業(yè)務(wù)內(nèi)存對象的屬性列表、源數(shù)據(jù)表、用于數(shù)據(jù)塊內(nèi)基礎(chǔ)數(shù)據(jù)排序的屬性和業(yè)務(wù)內(nèi)存對象唯一標(biāo)識;
步驟306:從業(yè)務(wù)內(nèi)存對象的源數(shù)據(jù)表中讀取基礎(chǔ)數(shù)據(jù),形成基礎(chǔ)數(shù)據(jù)集;
步驟307:遍歷基礎(chǔ)數(shù)據(jù)集中的數(shù)據(jù),根據(jù)基礎(chǔ)數(shù)據(jù)的單位等信息創(chuàng)建或加入已有的數(shù)據(jù)塊中,并將新的數(shù)據(jù)塊地址信息添加至數(shù)據(jù)塊列表中;
步驟308:返回步驟303。
[0024]為了保持數(shù)據(jù)塊中的基礎(chǔ)數(shù)據(jù)始終為最新的業(yè)務(wù)數(shù)據(jù),與源數(shù)據(jù)保持一致,本發(fā)明中添加了數(shù)據(jù)更新模塊,該模塊啟動兩個定時執(zhí)行的任務(wù),分別完成將源數(shù)據(jù)表中發(fā)生變更的數(shù)據(jù)讀取至數(shù)據(jù)塊的變更緩沖區(qū)中和將變更緩沖區(qū)的數(shù)據(jù)合并至基礎(chǔ)數(shù)據(jù)區(qū)中。[0025]圖4示意了本發(fā)明實施例中的變更數(shù)據(jù)同步流程,包括如下步驟:
步驟401:從數(shù)據(jù)庫中的數(shù)據(jù)變更索引表中讀取數(shù)據(jù),形成變更記錄集;
步驟402:遍歷變更記錄集,根據(jù)變更索引信息從基礎(chǔ)數(shù)據(jù)表中讀取基礎(chǔ)數(shù)據(jù),并根據(jù)按業(yè)務(wù)類型將變更后的基礎(chǔ)數(shù)據(jù)分組保存;
步驟403:遍歷上述步驟中每個分組內(nèi)的基礎(chǔ)數(shù)據(jù),根據(jù)該數(shù)據(jù)的變更類型分別添加至相應(yīng)數(shù)據(jù)塊變更緩沖區(qū)的新增列表、修改列表或刪除列表中。
[0026]圖5示意了本發(fā)明實施例中的變更緩沖數(shù)據(jù)合并流程,包括如下步驟:
步驟501:獲取變更緩沖區(qū)的業(yè)務(wù)內(nèi)存對象列表;
步驟502:判斷是否存在下一個業(yè)務(wù)內(nèi)存對象,如果存在則執(zhí)行步驟503,如果不存在則結(jié)束;
步驟503:獲取上述業(yè)務(wù)內(nèi)存對象的數(shù)據(jù)塊列表;
步驟504:判斷是否存在下一個數(shù)據(jù)塊,如果存在則執(zhí)行步驟505,如果不存在則執(zhí)行步驟502 ;
步驟505:獲取數(shù)據(jù)塊變更緩沖區(qū)中的新增列表;
步驟506:遍歷上述新增列表,將列表中的數(shù)據(jù)添加至已有或新數(shù)據(jù)塊的基礎(chǔ)數(shù)據(jù)區(qū); 步驟507:獲取數(shù)據(jù)塊變更緩沖區(qū)中的修改列表;
步驟508:遍歷上述修改列表,修改該數(shù)據(jù)塊中基礎(chǔ)數(shù)據(jù)區(qū)中的基礎(chǔ)數(shù)據(jù);
步驟509:獲取數(shù)據(jù)塊變更緩沖區(qū)中的刪除列表;
步驟510:遍歷上述刪除列表,刪除該數(shù)據(jù)塊中基礎(chǔ)數(shù)據(jù)區(qū)中對應(yīng)的基礎(chǔ)數(shù)據(jù)。
[0027]上述三個處理流程,緩存數(shù)據(jù)加載、變更數(shù)據(jù)同步、變更緩沖數(shù)據(jù)合并共同實現(xiàn)了數(shù)據(jù)緩存區(qū)所有數(shù)據(jù)塊中的基礎(chǔ)數(shù)據(jù)能夠及時與源數(shù)據(jù)表中的數(shù)據(jù)保持一致的目的,保證了指標(biāo)計算時的基礎(chǔ)數(shù)據(jù)的完整性與準(zhǔn)確性。變更緩沖區(qū)的設(shè)置解決了直接將數(shù)據(jù)的變化更新至數(shù)據(jù)塊的基礎(chǔ)數(shù)據(jù)區(qū)中需要進行較多的業(yè)務(wù)邏輯處理,效率較低,無法滿足大量的數(shù)據(jù)變化。同時,在指標(biāo)計算的過程中,變更緩沖區(qū)中的數(shù)據(jù)也參與相應(yīng)的指標(biāo)計算,保證的指標(biāo)計算結(jié)果的準(zhǔn)確性。
[0028]圖6示意了本發(fā)明實施例中的指標(biāo)計算請求處理流程,包括如下步驟:
步驟601:從數(shù)據(jù)庫中獲取指標(biāo)計算請求;
步驟602:根據(jù)指標(biāo)計算請求中所包含的條件信息,生成用于篩選基礎(chǔ)數(shù)據(jù)的內(nèi)存對
象;
步驟603:依據(jù)上述步驟602生成的篩選條件內(nèi)存對象,從數(shù)據(jù)緩存區(qū)中篩選出參與計算的數(shù)據(jù)塊,并形成計算數(shù)據(jù)塊列表;
步驟604:根據(jù)系統(tǒng)當(dāng)前設(shè)定的最大線程數(shù)和上述步驟603中生成的計算數(shù)據(jù)塊列表中的基礎(chǔ)數(shù)據(jù)量大小,確定數(shù)據(jù)組的數(shù)目以及每個數(shù)據(jù)組所包含的基礎(chǔ)數(shù)據(jù)數(shù)量;
步驟605:根據(jù)確定的數(shù)據(jù)組的數(shù)目和所含基礎(chǔ)數(shù)據(jù)的數(shù)量對計算數(shù)據(jù)塊列表中的數(shù)據(jù)塊進行切割,形成相應(yīng)的數(shù)據(jù)組;
步驟606:根據(jù)數(shù)據(jù)組的數(shù)量,創(chuàng)建多個基礎(chǔ)指標(biāo)計算線程,并形成基礎(chǔ)指標(biāo)計算任務(wù)列表。將每個數(shù)據(jù)組提交至所創(chuàng)建的基礎(chǔ)指標(biāo)計算線程,且將線程對應(yīng)的基礎(chǔ)指標(biāo)計算任務(wù)狀態(tài)設(shè)置為計算中,同時創(chuàng)建一個基礎(chǔ)指標(biāo)合并線程;
步驟607:每個基礎(chǔ)指標(biāo)計算線程遍歷相應(yīng)數(shù)據(jù)組中的基礎(chǔ)數(shù)據(jù),完成基礎(chǔ)指標(biāo)計算,并根據(jù)執(zhí)行情況,更新本基礎(chǔ)指標(biāo)計算線程所執(zhí)行基礎(chǔ)指標(biāo)計算任務(wù)的執(zhí)行狀態(tài);
步驟608:基礎(chǔ)指標(biāo)合并線程定時訪問每個基礎(chǔ)指標(biāo)計算線程計算任務(wù)的執(zhí)行狀態(tài);步驟609:判斷所有基礎(chǔ)指標(biāo)計算線程所對應(yīng)的計算任務(wù)是否全部完成,如果沒有全部完成,則執(zhí)行步驟610,如果全部完成,則執(zhí)行步驟611 ;
步驟610:休眠ls,返回步驟609 ;
步驟611:將多個線程返回的基礎(chǔ)指標(biāo)結(jié)果進行合并,并計算生成各級單位可靠性綜合指標(biāo),寫可靠性指標(biāo)結(jié)果列表;
步驟612:根據(jù)可靠性指標(biāo)結(jié)果列表的數(shù)據(jù)將各級單位可靠性綜合指標(biāo)寫入數(shù)據(jù)庫,以反饋給用戶。
[0029]圖7示意了本發(fā)明實施例中的指標(biāo)計算流程,包括如下步驟:
步驟701:獲取數(shù)據(jù)組中基礎(chǔ)數(shù)據(jù)迭代器,該迭代器包含了對該數(shù)據(jù)組中各數(shù)據(jù)塊基礎(chǔ)數(shù)據(jù)區(qū)中基礎(chǔ)數(shù)據(jù),以及變更緩沖區(qū)中新增列表中基礎(chǔ)數(shù)據(jù)的迭代;
步驟702:判斷基礎(chǔ)數(shù)據(jù)迭代器中是否存在下一條數(shù)據(jù),如果存在,則執(zhí)行步驟703,如果不存在,則結(jié)束;
步驟703:讀取該條基礎(chǔ)數(shù)據(jù);
步驟704:判斷該條基礎(chǔ)數(shù)據(jù)在緩沖區(qū)的修改列表中是否存在,如果存在,則執(zhí)行步驟705,如果不存在,則執(zhí)行步驟706 ;
步驟705:讀取變更緩沖區(qū)修改列表中的基礎(chǔ)數(shù)據(jù),替代步驟703中的數(shù)據(jù);
步驟706:該條基礎(chǔ)數(shù)據(jù)在緩沖區(qū)的刪除列表中是否存在,如果存在,則執(zhí)行步驟702,如果不存在,則執(zhí)行步驟707;
步驟707:判斷該基礎(chǔ)數(shù)據(jù)是否符合用戶提交計算條件,如果符合,則執(zhí)行步驟708,如果不符合,則執(zhí)行步驟702。
[0030]本發(fā)明實施例通過多數(shù)據(jù)塊對基礎(chǔ)數(shù)據(jù)進行緩存,根據(jù)電力可靠性業(yè)務(wù)特點設(shè)計了緩存數(shù)據(jù)結(jié)構(gòu),提高了電力可靠性指標(biāo)計算時數(shù)據(jù)檢索的效率;并建立了基礎(chǔ)數(shù)據(jù)變更同步機制,設(shè)置變更緩沖區(qū),提高了變更數(shù)據(jù)同步的效率;指標(biāo)計算時采用基礎(chǔ)數(shù)據(jù)分組,利用多線程技術(shù)完成基礎(chǔ)指標(biāo)的計算,最后對多個基礎(chǔ)指標(biāo)結(jié)果進行合并,計算出滿足要的可靠性指標(biāo)結(jié)果,保證了電力可靠性指標(biāo)計算的速度。
[0031]以上所述對本發(fā)明的目的、技術(shù)方案和【具體實施方式】進行了詳細說明,所應(yīng)理解的是,以上所述并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
【權(quán)利要求】
1.一種基于緩存數(shù)據(jù)多線程處理的電力可靠性指標(biāo)快速計算方法,其特征在于,該方法包括以下步驟: (1)在內(nèi)存中創(chuàng)建數(shù)據(jù)緩存區(qū),按業(yè)務(wù)數(shù)據(jù)類型劃分,以管理單位、設(shè)備注冊年月或停電發(fā)生年月為主鍵建立數(shù)據(jù)塊,緩存基礎(chǔ)數(shù)據(jù); (2)在每個數(shù)據(jù)塊中建立變更緩沖區(qū),記錄發(fā)生變更的數(shù)據(jù),并定時將變更緩沖區(qū)數(shù)據(jù)與數(shù)據(jù)塊中基礎(chǔ)數(shù)據(jù)合并,清空變更緩沖區(qū); (3)根據(jù)用戶提交的可靠性指標(biāo)計算請求所輸入的條件,在數(shù)據(jù)緩存區(qū)中檢索參與計算的數(shù)據(jù)塊; (4)根據(jù)系統(tǒng)當(dāng)前設(shè)定的最大線程數(shù),將檢索出參與計算的數(shù)據(jù)塊中數(shù)據(jù)平均切割成多組,并創(chuàng)建多個基礎(chǔ)指標(biāo)計算線程和一個基礎(chǔ)指標(biāo)合并線程; (5)所有基礎(chǔ)指標(biāo)計算線程完成基礎(chǔ)指標(biāo)計算后,由基礎(chǔ)指標(biāo)合并線程將各基礎(chǔ)指標(biāo)計算線程計算出的基礎(chǔ)指標(biāo)結(jié)果進行合并,計算各級管理單位可靠性綜合指標(biāo)。
2.根據(jù)權(quán)利要求1所述的基于緩存數(shù)據(jù)多線程處理的電力可靠性指標(biāo)快速計算方法,其特征在于,上述步驟(1) 在內(nèi)存中創(chuàng)建數(shù)據(jù)緩存區(qū),緩存基礎(chǔ)數(shù)據(jù)包括以下步驟: (Ia)按業(yè)務(wù)數(shù)據(jù)類型劃分,在數(shù)據(jù)緩存區(qū)中創(chuàng)建業(yè)務(wù)內(nèi)存對象,并初始化;初始化的信息包括指定對象數(shù)據(jù)來源、所需要讀取的字段、設(shè)定數(shù)據(jù)塊內(nèi)數(shù)據(jù)排序字段、抽取數(shù)據(jù)所用的過濾條件; (Ib)從外部數(shù)據(jù)源讀取基礎(chǔ)數(shù)據(jù),同時按管理單位、注冊日期或停電時間進行排序,在內(nèi)存中形成原始數(shù)據(jù)記錄集; (Ic)遍歷步驟(Ib)中形成的原始數(shù)據(jù)記錄集中的數(shù)據(jù),根據(jù)管理單位、設(shè)備注冊年月或停電發(fā)生年月新建數(shù)據(jù)塊,或?qū)?shù)據(jù)寫入已有的數(shù)據(jù)塊; (Id)建立由管理單位、設(shè)備注冊年月或停電發(fā)生年月形成的主鍵與數(shù)據(jù)塊地址指針的數(shù)據(jù)塊列表。
3.根據(jù)權(quán)利要求1所述的基于緩存數(shù)據(jù)多線程處理的電力可靠性指標(biāo)快速計算方法,其特征在于,上述步驟(1)中,所述的數(shù)據(jù)塊中基礎(chǔ)數(shù)據(jù)區(qū)內(nèi)部數(shù)據(jù)排序方式為:設(shè)備注冊數(shù)據(jù)按設(shè)備注冊日期排序,設(shè)備運行數(shù)據(jù)按停電開始時間排序。
4.根據(jù)權(quán)利要求1所述的基于緩存數(shù)據(jù)多線程處理的電力可靠性指標(biāo)快速計算方法,其特征在于,上述步驟(2)在每個數(shù)據(jù)塊中建立數(shù)據(jù)變更緩沖區(qū),清空緩沖區(qū)包括以下步驟: (2a)在每個數(shù)據(jù)塊中建立數(shù)據(jù)變更緩沖區(qū),在變更緩沖區(qū)中創(chuàng)建三個列表分別為新增列表、修改列表和刪除列表; (2b)定時根據(jù)外部數(shù)據(jù)源提供的基礎(chǔ)數(shù)據(jù)變更信息,將發(fā)生變更的基礎(chǔ)數(shù)據(jù)按變更類型分別讀取至新增列表、修改列表和刪除列表; (2c)定時將新增列表、修改列表和刪除列表中的數(shù)據(jù)與數(shù)據(jù)塊中基礎(chǔ)數(shù)據(jù)進行合并; (2d)清空新增列表、修改列表和刪除列表。
5.根據(jù)權(quán)利要求1所述的基于緩存數(shù)據(jù)多線程處理的電力可靠性指標(biāo)快速計算方法,其特征在于,上述步驟(3)中,包括如下步驟: (3a)從數(shù)據(jù)庫中獲取用戶提交的可靠性指標(biāo)計算請求,并將其轉(zhuǎn)換成篩選基礎(chǔ)數(shù)據(jù)條件的內(nèi)存對象;(3b)遍歷所有業(yè)務(wù)內(nèi)存對象的數(shù)據(jù)塊,依據(jù)數(shù)據(jù)塊主鍵信息和指標(biāo)計算所涉及的起始時間篩選數(shù)據(jù)塊; (3c)將篩選出的參與計算的數(shù)據(jù)塊通過地址指針的方式添加至計算數(shù)據(jù)塊列表中。
6.根據(jù)權(quán)利要求1所述的基于緩存數(shù)據(jù)多線程處理的電力可靠性指標(biāo)快速計算方法,其特征在于,上述步驟(4)中,包括以下步驟: (4a)根據(jù)系統(tǒng)當(dāng)前設(shè)定的最大線程數(shù)和計算數(shù)據(jù)塊列表中參與計算的基礎(chǔ)數(shù)據(jù)總記錄數(shù)確定數(shù)據(jù)組的數(shù)目,以及切割后每個數(shù)據(jù)組所含基礎(chǔ)數(shù)據(jù)的平均數(shù)量; (4b)遍歷計算數(shù)據(jù)塊列表中所有數(shù)據(jù)塊,遍歷數(shù)據(jù)塊的同時創(chuàng)建基礎(chǔ)數(shù)據(jù)容量為步驟(4a)中所述平均數(shù)量的數(shù)據(jù)組,如果當(dāng)前數(shù)據(jù)塊中所包含的基礎(chǔ)數(shù)據(jù)量大于當(dāng)前數(shù)據(jù)組剩余容量時,則拆分數(shù)據(jù)塊中的基礎(chǔ)數(shù)據(jù)先將當(dāng)前數(shù)據(jù)組填充滿,再將剩余的基礎(chǔ)數(shù)據(jù)添加至新的數(shù)據(jù)組中;如果當(dāng)前數(shù)據(jù)塊中所包含的基礎(chǔ)數(shù)據(jù)量小于當(dāng)前數(shù)據(jù)組剩余容量時則不進行拆分,直接將其添加至當(dāng)前數(shù)據(jù)組中; (4c)根據(jù)數(shù)據(jù)組的數(shù)量,創(chuàng)建多個基礎(chǔ)指標(biāo)計算線程,并形成基礎(chǔ)指標(biāo)計算任務(wù)列表;將每組數(shù)據(jù)提交至所創(chuàng)建的基礎(chǔ)指標(biāo)計算線程,且將線程對應(yīng)的基礎(chǔ)指標(biāo)計算任務(wù)狀態(tài)設(shè)置為計算中; (4d)創(chuàng)建一個基礎(chǔ)指標(biāo)合并線程。
7.根據(jù)權(quán)利要求1所述的基于緩存數(shù)據(jù)多線程處理的電力可靠性指標(biāo)快速計算方法,其特征在于,上述步驟(5)中,包括以下步驟: (5a)每個基礎(chǔ)指標(biāo)計算線程遍歷所處理的數(shù)據(jù)組中每一條基礎(chǔ)數(shù)據(jù),以及相應(yīng)數(shù)據(jù)塊中的變更緩沖區(qū)新增列表中的數(shù)據(jù),并根據(jù)篩選基礎(chǔ)數(shù)據(jù)條件的內(nèi)存對象判斷該條基礎(chǔ)數(shù)據(jù)是否參與計算,如果參與計算則將該條數(shù)據(jù)提交基 礎(chǔ)指標(biāo)計算單元進行計算,計算結(jié)果存入基礎(chǔ)指標(biāo)結(jié)果列表中,如果不參與則處理下一條基礎(chǔ)數(shù)據(jù),直至該組數(shù)據(jù)全部處理完成; (5b)每個基礎(chǔ)指標(biāo)計算線程完成后,將該線程對應(yīng)的計算任務(wù)狀態(tài)設(shè)置為完成; (5c)遍歷基礎(chǔ)指標(biāo)計算任務(wù)列表中的任務(wù),判斷所有任務(wù)是否都已經(jīng)執(zhí)行完成,如果沒有全部完成則休眠I秒鐘再后執(zhí)行步驟(5b),如果全部完成則執(zhí)行步驟(5d); (5d)遍歷基礎(chǔ)指標(biāo)結(jié)果列表中的每一條結(jié)果記錄,將同一單位的結(jié)果記錄中的基礎(chǔ)指標(biāo)進行合并,計算該管理單位的可靠性綜合指標(biāo),并將全部指標(biāo)結(jié)果寫入可靠性指標(biāo)結(jié)果列表中; (5e)將可靠性指標(biāo)結(jié)果列表中的指標(biāo)結(jié)果寫入數(shù)據(jù)庫,反饋給用戶。
【文檔編號】G06F17/30GK103488684SQ201310373229
【公開日】2014年1月1日 申請日期:2013年8月23日 優(yōu)先權(quán)日:2013年8月23日
【發(fā)明者】吳猛, 黃燦, 俞俊, 羅黎明, 施康, 李林輝 申請人:國家電網(wǎng)公司, 國網(wǎng)電力科學(xué)研究院, 南京南瑞集團公司