一種可配置合并取值的cim內(nèi)存庫(kù)加載方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及電力系統(tǒng)的數(shù)據(jù)處理方法,具體來(lái)說(shuō)涉及一種可配置合并取值的CIM內(nèi)存庫(kù)加載方法。
【背景技術(shù)】
[0002]國(guó)際電工技術(shù)委員會(huì)IEC定義了一種電力系統(tǒng)通用信息模型CIM (CommonInformat1n Model,通用信息模型)。CIM提供了一個(gè)關(guān)于電力系統(tǒng)信息的全面邏輯視圖,是一個(gè)代表電力企業(yè)所有主要對(duì)象的抽象模型,包括了這些對(duì)象的公有類(lèi)和屬性,以及它們之間的關(guān)系。
[0003]使用CIM描述電力系統(tǒng)數(shù)據(jù)使得每種業(yè)務(wù)對(duì)象都有了一個(gè)特定的類(lèi)名,包含明確的屬性和關(guān)聯(lián)定義,便于對(duì)數(shù)據(jù)進(jìn)行統(tǒng)一描述和管理,也使得將電力設(shè)備對(duì)象之間映射成面向?qū)ο缶幊陶Z(yǔ)言中的內(nèi)存對(duì)象成為可能。屬性是CIM類(lèi)中的字段。
[0004]在電力自動(dòng)化分析等領(lǐng)域,將按照CM組織的對(duì)象加載到內(nèi)存中進(jìn)行業(yè)務(wù)邏輯分析處理的作為已經(jīng)很常見(jiàn),但多數(shù)是輕量級(jí)模型,數(shù)據(jù)量在幾十萬(wàn)對(duì)象,而百萬(wàn)甚至千萬(wàn)級(jí)的數(shù)據(jù)平臺(tái)很少有通過(guò)內(nèi)存庫(kù)提高數(shù)據(jù)訪問(wèn)效率的做法。
[0005]按照CIM組織的電力系統(tǒng)數(shù)據(jù)有一定的數(shù)據(jù)特點(diǎn)和規(guī)律,例如一百萬(wàn)個(gè)設(shè)備的電壓等級(jí)字段有一百萬(wàn)個(gè)值,但實(shí)際上只有“5001^”、“2201^”、“1101^”、“351^”和“101^”這六個(gè)取值,不需要占用一百萬(wàn)個(gè)字符串存儲(chǔ)單元。有些屬性取值很長(zhǎng),但可以分段,且但部分重復(fù),例如對(duì)象的路徑名,前半部分多數(shù)是重復(fù)的。針對(duì)這些規(guī)律可以找到一個(gè)存儲(chǔ)與效率折中的加載方法,減少CIM內(nèi)存庫(kù)對(duì)資源占用,擴(kuò)大CIM內(nèi)存庫(kù)的應(yīng)用范圍。
[0006]現(xiàn)有的方法是直接加載CIM模型中的屬性值到內(nèi)存中構(gòu)建CIM內(nèi)存庫(kù)是最常用的方式,每一個(gè)有值的屬性取值都會(huì)被分配一個(gè)存儲(chǔ)單元。這樣的方法對(duì)于大量取值相同或相近的字符串類(lèi)屬性值,占用大量的內(nèi)存空間,內(nèi)存使用量隨著對(duì)象數(shù)呈線性增長(zhǎng),很難承受巨大的數(shù)據(jù)量。
[0007]另外一種方法是內(nèi)存庫(kù)中只做基本的初始化和內(nèi)存存儲(chǔ),屬性取值不存儲(chǔ)在內(nèi)存中,或者選擇性存儲(chǔ),對(duì)大量占內(nèi)存大的字符串類(lèi)型屬性不建立內(nèi)存存儲(chǔ),當(dāng)查詢(xún)時(shí)動(dòng)態(tài)向服務(wù)器或數(shù)據(jù)庫(kù)查詢(xún),用于滿足基于對(duì)象數(shù)據(jù)訪問(wèn)或者strutS2等自動(dòng)化框架對(duì)內(nèi)存庫(kù)的要求。實(shí)際上這種方法是一種假內(nèi)存庫(kù),因?yàn)槿炕虿糠謱傩詻](méi)有保存在內(nèi)存中,查詢(xún)時(shí)需要反復(fù)與服務(wù)器進(jìn)行交互,查詢(xún)效率極低,只能滿足有些界面顯示或手動(dòng)查詢(xún)操作,很難對(duì)自動(dòng)化分析業(yè)務(wù)提供支持。
【發(fā)明內(nèi)容】
[0008]本發(fā)明的目的在于根據(jù)電力系統(tǒng)CIM模型數(shù)據(jù)的特點(diǎn),發(fā)現(xiàn)數(shù)據(jù)重復(fù)的規(guī)律,設(shè)計(jì)出CIM內(nèi)存庫(kù)加載優(yōu)化方案。本發(fā)明的可配置合并取值的CIM內(nèi)存庫(kù)加載方法將通過(guò)合并字符串類(lèi)型屬性中相同的取值,并將長(zhǎng)字符串分段以多個(gè)對(duì)象引用來(lái)替代,實(shí)現(xiàn)內(nèi)存的縮減。
[0009]本發(fā)明的目的可通過(guò)以下的技術(shù)措施來(lái)實(shí)現(xiàn):
[0010]一種可配置合并取值的CIM內(nèi)存庫(kù)加載方法,包括如下步驟:
[0011]第一步:配置合并屬性
[0012]根據(jù)數(shù)據(jù)特點(diǎn),配置需要合并的屬性。對(duì)于重復(fù)性高的屬性,配置其需要合并屬性值的標(biāo)識(shí),記錄在配置文件中,以便后續(xù)步驟能夠識(shí)別該屬性是否需要進(jìn)行取值合并。例如可將導(dǎo)電設(shè)備的voltageLevel屬性設(shè)置為取值合并,則后續(xù)步驟再遇到導(dǎo)電設(shè)備的voltageLevel屬性時(shí)會(huì)進(jìn)行進(jìn)一步處理。
[0013]第二步:配置屬性分段規(guī)則
[0014]對(duì)于可根據(jù)明確規(guī)則分段的長(zhǎng)字符串屬性,將字符串分段后與其他對(duì)象的屬性取值比較,重復(fù)的概率更高,則進(jìn)行分段處理。屬性分段處理需要配置分段規(guī)則。
[0015]屬性的分段規(guī)則包括分隔符(如“/”)和分割點(diǎn),即在第幾段進(jìn)行分隔比較。例如兩個(gè)長(zhǎng)字符串屬性取值選擇前6段比較和選擇前4段比較重復(fù)的概率是不一樣的,比較的段數(shù)越少,重復(fù)的概率越大,但剩余內(nèi)容的重復(fù)性也越高。因此需要根據(jù)數(shù)據(jù)的特點(diǎn)選擇最優(yōu)的分隔點(diǎn)。根據(jù)分段規(guī)則可通過(guò)編程語(yǔ)言的字符串處理方法如String, split或String,substring對(duì)字符串進(jìn)行分隔。
[0016]一個(gè)屬性可以配置多個(gè)分隔點(diǎn),這樣一個(gè)字符串就被分隔成多個(gè)字符串進(jìn)行比較、合并。
[0017]分割點(diǎn)配置示例如下:
[0018]IdentifiedObject.pathName/24
[0019]表示IdentifiedObject.pathName屬性以“/”為分隔符,通過(guò)第二個(gè)和第四個(gè)分隔符將字符串分割成三段。
[0020]第三步:建立映射表
[0021 ] 建立字符串屬性取值內(nèi)容到字符串內(nèi)存對(duì)象的映射表,根據(jù)不同語(yǔ)言的特點(diǎn),映射表采用哈希映射表或二叉樹(shù)映射表,優(yōu)選哈希映射表。
[0022]第四步:設(shè)置屬性值
[0023]當(dāng)為屬性設(shè)置字符串取值時(shí),若該屬性設(shè)置了合并,則到第三步構(gòu)造的映射表中查詢(xún)是否存在該字符串取值的內(nèi)存對(duì)象,如果存在,被設(shè)置的屬性直接使用已存在的字符串內(nèi)存對(duì)象;如果不存在,先向映射表中插入這個(gè)字符串內(nèi)存對(duì)象,然后再讓被設(shè)置的屬性使用這個(gè)映射表中的字符串內(nèi)存對(duì)象。
[0024]對(duì)于分段屬性,首先根據(jù)要分的段數(shù)為屬性申請(qǐng)數(shù)組。然后將要設(shè)置的字符串取值按配置的分段規(guī)則分隔成相應(yīng)的段數(shù),每一段到第三步構(gòu)造的映射表中查詢(xún)是否已存在相同的字符串。如果存在,則直接將映射表中的字符串內(nèi)存對(duì)象放到數(shù)組中;如果不存在,先將本段字符串內(nèi)存對(duì)象插入到映射表,同時(shí)存放在數(shù)組中。
[0025]第五步:獲取屬性值
[0026]對(duì)于設(shè)置了簡(jiǎn)單合并且不需要分段處理的屬性,獲取屬性值時(shí)直接返回該屬性使用的字符串內(nèi)存對(duì)象即可。對(duì)于配置了分段處理的屬性,需要將屬性值數(shù)組中的分段字符串組合成新的字符串對(duì)象返回。
[0027]本發(fā)明對(duì)比現(xiàn)有技術(shù),有如下優(yōu)點(diǎn):
[0028]本方法可以在基本不影響效率的情況下,有效的減少基于CIM的面向?qū)ο髢?nèi)存庫(kù)的資源占用,對(duì)于含義大量重復(fù)的字符串屬性的電力模型尤其明顯。內(nèi)存占用的大幅減少使得重量級(jí)數(shù)據(jù)平臺(tái)的內(nèi)存庫(kù)構(gòu)建不再受過(guò)高的內(nèi)存要求限制,能夠進(jìn)行快速業(yè)務(wù)分析和提供高速數(shù)據(jù)訪問(wèn)能力。
【具體實(shí)施方式】
[0029]在數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)中,數(shù)據(jù)類(lèi)型可劃分為對(duì)象引用、數(shù)字和字符串三大類(lèi)