屈志堅(jiān),吳廣龍,帥誠(chéng)鵬,梁家敏
(1.華東交通大學(xué)軌道交通基礎(chǔ)設(shè)施性能監(jiān)測(cè)與保障國(guó)家重點(diǎn)實(shí)驗(yàn)室,南昌 330013;2.華東交通大學(xué)電氣與自動(dòng)化工程學(xué)院,南昌 330013)
近年來(lái)智能電網(wǎng)建設(shè)進(jìn)程穩(wěn)步推進(jìn),太陽(yáng)能、風(fēng)電和電動(dòng)汽車充電樁的接入使配電網(wǎng)規(guī)模不斷增加,配電網(wǎng)監(jiān)測(cè)需求提高,導(dǎo)致配電網(wǎng)設(shè)備的狀態(tài)采樣點(diǎn)和監(jiān)測(cè)傳感器的數(shù)量也大幅增加;加上設(shè)備采樣頻率的提升,使得配電網(wǎng)監(jiān)控系統(tǒng)采集的數(shù)據(jù)急劇增長(zhǎng),數(shù)據(jù)體量已超過(guò)TB級(jí)[1?3],遠(yuǎn)遠(yuǎn)超過(guò)了關(guān)系型數(shù)據(jù)庫(kù)TB級(jí)容量限制。配電網(wǎng)監(jiān)測(cè)數(shù)據(jù)的增加不僅增大了系統(tǒng)的維護(hù)難度,而且導(dǎo)致產(chǎn)生的延遲越來(lái)越大,配電網(wǎng)監(jiān)控系統(tǒng)響應(yīng)時(shí)間過(guò)長(zhǎng)可能導(dǎo)致關(guān)鍵故障信息的遲報(bào)甚至界面卡頓。
配電網(wǎng)監(jiān)測(cè)數(shù)據(jù)的急劇增加,對(duì)配電網(wǎng)監(jiān)測(cè)數(shù)據(jù)的快速處理提出了要求,如何高效處理配電網(wǎng)監(jiān)測(cè)數(shù)據(jù)從而實(shí)現(xiàn)海量數(shù)據(jù)的監(jiān)測(cè)和電能質(zhì)量監(jiān)控成為亟待解決的問(wèn)題。目前,相關(guān)學(xué)者在海量數(shù)據(jù)的高效存取研究方向已經(jīng)取得了一定的研究成果,文獻(xiàn)[4]研究的擴(kuò)展關(guān)系型數(shù)據(jù)庫(kù)方法將數(shù)據(jù)存儲(chǔ)在不同主機(jī)的磁盤,但關(guān)系型數(shù)據(jù)庫(kù)的存儲(chǔ)空間有限,需要通過(guò)增加主機(jī)數(shù)量來(lái)增加數(shù)據(jù)庫(kù)容量;文獻(xiàn)[5]研究的基于內(nèi)存計(jì)算的內(nèi)存數(shù)據(jù)庫(kù)方法能提高數(shù)據(jù)的處理性能,但內(nèi)存數(shù)據(jù)庫(kù)存在內(nèi)存容量不足、輸入輸出壓力大、緩存命中率低和數(shù)據(jù)安全性較差等問(wèn)題;文獻(xiàn)[6]提出基于Hadoop 架構(gòu)存儲(chǔ)反向傳播BP(back propagation)神經(jīng)網(wǎng)絡(luò)的短期負(fù)荷預(yù)測(cè)數(shù)據(jù)的方法;文獻(xiàn)[7]提出基于Hadoop 分布式文件系統(tǒng)HDFS(hadoop distributed file system)的數(shù)據(jù)存儲(chǔ)優(yōu)化技術(shù);文獻(xiàn)[8]提出一種將數(shù)據(jù)自動(dòng)生成非結(jié)構(gòu)化查詢語(yǔ)言NoSQL(not only structured query language)存儲(chǔ)結(jié)構(gòu)的平臺(tái)。
NoSQL以HBase[9]分布式列數(shù)據(jù)庫(kù)為主要代表,HBase 分布式鍵值對(duì)數(shù)據(jù)庫(kù)基于主鍵的查詢很快,但基于非主鍵的查詢需要全表掃描,對(duì)系統(tǒng)資源的耗費(fèi)較大。針對(duì)這一問(wèn)題,文獻(xiàn)[10?11]基于MapRe?duce 進(jìn)行研究,存儲(chǔ)數(shù)據(jù)時(shí)生成元數(shù)據(jù),查詢時(shí)讀取元數(shù)據(jù)構(gòu)造查詢樹;文獻(xiàn)[12]提出基于協(xié)處理器的HBase索引構(gòu)建方案,通過(guò)協(xié)處理器構(gòu)建二級(jí)索引并根據(jù)HBase 表的數(shù)據(jù)更新自動(dòng)更新索引并持久化索引;文獻(xiàn)[13]驗(yàn)證了引入緩存技術(shù)能有效提升大數(shù)據(jù)集群處理性能;文獻(xiàn)[14]提出在數(shù)據(jù)庫(kù)系統(tǒng)中基于低延遲和高帶寬的內(nèi)存建立緩存以提升查詢速度并減輕底層磁盤壓力;文獻(xiàn)[15]設(shè)計(jì)出一種基于日志結(jié)構(gòu)合并樹LSM?Tree(log structured merge?Tree)的分布式索引方案,該方案采用讀寫分離和批量更新的方法更新索引數(shù)據(jù);文獻(xiàn)[16]描述了瞬態(tài)數(shù)據(jù)緩存策略性能的基本限制,測(cè)試了瞬態(tài)數(shù)據(jù)使用傳統(tǒng)緩存策略的性能,并提出一種新的緩存策略,該策略同時(shí)使用流行度和剩余生命期(數(shù)據(jù)變得冗余之前剩余的時(shí)間)進(jìn)行緩存決策,測(cè)試顯示新的緩存策略優(yōu)于傳統(tǒng)的緩存策略;文獻(xiàn)[17]對(duì)數(shù)據(jù)設(shè)計(jì)了特殊的緩存結(jié)構(gòu),有效提高了搜索引擎的查詢性能。
海量數(shù)據(jù)的主流處理方法為NoSQL索引集群,本文將監(jiān)測(cè)數(shù)據(jù)存儲(chǔ)在NoSQL分布式索引集群中,通過(guò)緩存技術(shù)將出現(xiàn)頻繁的數(shù)據(jù)存儲(chǔ)在緩存中,查詢時(shí)可以直接從緩存中獲取結(jié)果。但一方面原有的熱數(shù)據(jù)鏈表HDL(hot data linked?list)緩存方法是將數(shù)據(jù)存儲(chǔ)在鏈表中,當(dāng)緩存空間占滿時(shí),需要通過(guò)更新鏈表中存儲(chǔ)的數(shù)據(jù)實(shí)現(xiàn)緩存記錄的更新;當(dāng)緩存記錄更新頻繁時(shí)會(huì)使鏈表節(jié)點(diǎn)頻繁移動(dòng),內(nèi)存消耗較大。另一方面,索引集群?jiǎn)?dòng)初期緩存系統(tǒng)中沒(méi)有存儲(chǔ)緩存記錄,使索引系統(tǒng)啟動(dòng)初期難以命中緩存,無(wú)法充分發(fā)揮緩存技術(shù)的優(yōu)勢(shì);若能在索引系統(tǒng)啟動(dòng)初期將熱點(diǎn)數(shù)據(jù)存入緩存系統(tǒng),可以提高熱點(diǎn)數(shù)據(jù)的查詢速度,加快監(jiān)控系統(tǒng)的響應(yīng)速度。
針對(duì)上述問(wèn)題,本文提出一種配電網(wǎng)監(jiān)測(cè)數(shù)據(jù)索引集群的分布緩存方法。首先,構(gòu)建配電網(wǎng)監(jiān)測(cè)數(shù)據(jù)的倒排索引結(jié)構(gòu),設(shè)計(jì)一種熱點(diǎn)數(shù)據(jù)部分鏈表HDPL(hot data part linked?list)緩存方法,為緩存記錄添加時(shí)間戳,通過(guò)選取部分?jǐn)?shù)據(jù)存入鏈表的方式減少鏈表的長(zhǎng)度,根據(jù)緩存記錄的訪問(wèn)時(shí)間間隔(HDPL值)大小淘汰緩存記錄,降低內(nèi)存消耗,提高緩存淘汰效率;然后,設(shè)計(jì)合理數(shù)目的預(yù)熱查詢,將熱點(diǎn)數(shù)據(jù)存入緩存實(shí)現(xiàn)索引集群的熱啟動(dòng),加快集群的響應(yīng)速度。最后,以工程數(shù)據(jù)為測(cè)試算例,驗(yàn)證了所提方法的有效性。
關(guān)系型數(shù)據(jù)庫(kù)是在關(guān)系型數(shù)據(jù)模型的基礎(chǔ)上,借助集合代數(shù)的數(shù)學(xué)方法處理數(shù)據(jù)的數(shù)據(jù)庫(kù)。關(guān)系型數(shù)據(jù)庫(kù)通過(guò)行和列的形式存儲(chǔ)數(shù)據(jù),在關(guān)系型數(shù)據(jù)庫(kù)中,實(shí)體之間的聯(lián)系由單一的結(jié)構(gòu)類型來(lái)表示,這種邏輯結(jié)構(gòu)是二維表,多個(gè)二維表構(gòu)成了關(guān)系型數(shù)據(jù)庫(kù)。笛卡爾積可以表示成一個(gè)二維表。一組具有相同類型的值的集合稱為域,給定一組域{E1,E2,???,Em} ,這些域中可以有相同的部分,則該域的笛卡爾積可表示為
式中,(e1,e2,???,em)為域的每個(gè)元素,稱為一個(gè)m元組,元素中的每一個(gè)值ei稱作一個(gè)分量。笛卡爾積可以表示成一個(gè)二維表,表中每列對(duì)應(yīng)一個(gè)域,每行對(duì)應(yīng)一個(gè)元素。
由于關(guān)系型數(shù)據(jù)庫(kù)的原子性、一致性、隔離性和持久性,數(shù)據(jù)一致性高,使關(guān)系型數(shù)據(jù)庫(kù)廣泛應(yīng)用于輸入輸出IO(Input Output)讀寫密集型系統(tǒng)。但是關(guān)系型數(shù)據(jù)庫(kù)的容量主要通過(guò)增加服務(wù)器上的磁盤空間來(lái)擴(kuò)展,隨著數(shù)據(jù)的增長(zhǎng),需要不斷增加硬盤空間,并且需要更快的機(jī)器來(lái)運(yùn)行,具有一定的局限性。
綜上,本文基于NoSQL數(shù)據(jù)庫(kù)搭建配電網(wǎng)監(jiān)測(cè)數(shù)據(jù)索引集群,將配電網(wǎng)監(jiān)測(cè)數(shù)據(jù)結(jié)構(gòu)改變?yōu)榈古潘饕灰刖彺婕夹g(shù)加快查詢速度,針對(duì)原緩存方法效率低的問(wèn)題提出HDPL 緩存方法來(lái)提高緩存效率;設(shè)計(jì)預(yù)熱查詢結(jié)構(gòu)提高索引系統(tǒng)啟動(dòng)初期的緩存命中概率,實(shí)現(xiàn)更高效率的查詢。具體數(shù)據(jù)處理流程如圖1所示。

圖1 配電網(wǎng)監(jiān)控系統(tǒng)的數(shù)據(jù)處理Fig.1 Data processing of distribution network monitoring system
本文搭建倒排索引集群處理配電網(wǎng)海量監(jiān)測(cè)數(shù)據(jù)。為了掌握供電設(shè)備的狀態(tài),需要收集各站所設(shè)備的運(yùn)行參數(shù)信息。由于傳感器數(shù)量的增加及測(cè)控終端采樣頻率的增加,導(dǎo)致配電網(wǎng)數(shù)據(jù)中心的監(jiān)測(cè)數(shù)據(jù)急劇增加。傳感器采集的數(shù)據(jù)主要包括現(xiàn)場(chǎng)環(huán)境的測(cè)量參數(shù)和現(xiàn)場(chǎng)設(shè)備的狀態(tài)數(shù)據(jù),采集的數(shù)據(jù)通過(guò)光纖通道傳輸至配電網(wǎng)數(shù)據(jù)中心。配電網(wǎng)數(shù)據(jù)中心由應(yīng)用服務(wù)器、存儲(chǔ)設(shè)備、網(wǎng)絡(luò)設(shè)備等構(gòu)成。在數(shù)據(jù)庫(kù)集群中將數(shù)據(jù)改變?yōu)榈古潘饕Y(jié)構(gòu),監(jiān)測(cè)數(shù)據(jù)的倒排索引結(jié)構(gòu)如圖2所示。

圖2 監(jiān)測(cè)數(shù)據(jù)的倒排索引結(jié)構(gòu)Fig.2 Inverted index structure of monitoring data
運(yùn)行狀態(tài)數(shù)據(jù)的屬性包括站所號(hào)、采樣名、采樣值、采樣時(shí)間戳等。通過(guò)映射的方式將所有數(shù)據(jù)組成的多個(gè)文檔映射為倒排索引結(jié)構(gòu),左邊為原始文檔,右邊為映射后的倒排索引結(jié)構(gòu)。如站所223出現(xiàn)位置為id:1_station字段。
考慮到監(jiān)測(cè)數(shù)據(jù)的高重復(fù)度,引入緩存能夠避免對(duì)高頻數(shù)據(jù)重復(fù)查詢從而增加查詢的工作效率。當(dāng)緩存空間占滿時(shí),緩存系統(tǒng)按照HDL更新緩存記錄。該方法通過(guò)鏈表結(jié)構(gòu)存儲(chǔ)緩存記錄,具體淘汰方法如圖3所示。

圖3 HDL 淘汰方法Fig.3 HDL elimination method
當(dāng)?shù)? 次查詢station:站所236 時(shí),緩存空間中存在站所236 的記錄,則命中緩存;此時(shí)將進(jìn)行緩存記錄的更新,將查詢結(jié)果站所236 存入鏈表的表頭位置,鏈表內(nèi)站所223 記錄需后移一位,完成緩存記錄的更新。當(dāng)執(zhí)行第2 次查詢時(shí),查analog?name:遙測(cè)16387,未命中緩存,查詢結(jié)果存入緩存空間;此時(shí)緩存空間已占滿,依照HDL 方法更新緩存,接著將第2 次查詢結(jié)果存入鏈表表頭,鏈表內(nèi)的緩存記錄依次后移一位。第3 次查詢未命中緩存,同樣按照上述過(guò)程更新緩存記錄。
在HDL方法更新緩存記錄時(shí),將鏈表內(nèi)所有的緩存記錄更新,若緩存記錄更新頻繁,該操作會(huì)占用大量集群資源,影響集群的查詢響應(yīng)時(shí)間。
針對(duì)原有的HDL 緩存方法更新緩存時(shí)需要將鏈表結(jié)構(gòu)中的緩存數(shù)據(jù)移動(dòng),從而出現(xiàn)緩存更新效率低的問(wèn)題。本文設(shè)計(jì)了一種HDPL 方法管理緩存,實(shí)現(xiàn)更高效的緩存淘汰。具體實(shí)現(xiàn)過(guò)程如下。
(1)查詢結(jié)果存入緩存中時(shí)會(huì)被添加時(shí)間戳,假如該查詢記錄存入緩存后一直未被命中,則該緩存記錄的時(shí)間戳始終不變;假如后續(xù)查詢命中該緩存,則更新該緩存記錄的時(shí)間戳為當(dāng)前時(shí)間節(jié)點(diǎn)t。隨機(jī)選取一定的緩存記錄,根據(jù)當(dāng)前時(shí)間節(jié)點(diǎn)t和緩存記錄的時(shí)間戳ti計(jì)算第i個(gè)預(yù)熱查詢選取的緩存記錄訪問(wèn)時(shí)間間隔Δt為
式中,l為預(yù)熱查詢的總次數(shù)。
(2)根據(jù)訪問(wèn)時(shí)間間隔計(jì)算緩存記錄的HDPL值crHDPL為
crHDPL=t?Δt,即
(3)將式(3)化簡(jiǎn)后可得
crHDPL=ti
緩存記錄的時(shí)間戳越小,則緩存記錄的HDPL值越小。根據(jù)HDPL 值的大小將選取的緩存記錄依次存入鏈表結(jié)構(gòu),當(dāng)緩存空間占滿需要淘汰緩存記錄時(shí),將鏈表中HDPL 值最小的緩存記錄淘汰,同時(shí)將新的查詢結(jié)果存入緩存空間。之后每次淘汰緩存記錄時(shí),隨機(jī)從緩存空間中選取5條緩存記錄,計(jì)算緩存記錄的HDPL 值,只要選舉的緩存記錄比鏈表中的任意一條緩存記錄的HDPL 值小,則根據(jù)HDPL 值的大小將緩存記錄插入到鏈表的適當(dāng)位置,將鏈表表尾的HDPL 值最小的緩存記錄淘汰,同時(shí)將新的查詢結(jié)果存入緩存空間;若選舉的緩存記錄比鏈表中的任意一條緩存記錄的HDPL值都大,則直接將鏈表表尾的HDPL 值最小的緩存記錄淘汰,同時(shí)將新的查詢結(jié)果存入緩存空間,完成緩存淘汰。
HDPL緩存方法只針對(duì)選取的緩存記錄執(zhí)行緩存淘汰,通過(guò)淘汰局部最小HDPL 值的緩存記錄代替淘汰全局HDPL 值最小的緩存記錄。相較于原本的HDL 方法,無(wú)需維護(hù)一個(gè)很長(zhǎng)的鏈表,更新緩存記錄時(shí)無(wú)需將鏈表中所有的緩存記錄移位,降低了內(nèi)存的操作復(fù)雜度,提升了緩存性能。
在索引集群中,數(shù)據(jù)以文檔的方式存儲(chǔ),文檔存儲(chǔ)在集群分片中,分片在不同的集群節(jié)點(diǎn)中。集群使用哈希算法對(duì)文檔唯一標(biāo)識(shí)ID(identification)字段的散列值進(jìn)行計(jì)算,根據(jù)計(jì)算得到的唯一ID字段的散列值將文檔分配至對(duì)應(yīng)的分片,使得每個(gè)分片上的文檔數(shù)量大致均衡。
執(zhí)行分布式查詢時(shí),客戶端向集群的任意節(jié)點(diǎn)發(fā)送查詢請(qǐng)求,接收到查詢請(qǐng)求的節(jié)點(diǎn)充當(dāng)查詢控制器。查詢控制器獲取集群其他節(jié)點(diǎn)的身份,構(gòu)造分布式查詢的子查詢并將子查詢?nèi)蝿?wù)分發(fā)給其他分片的副本。副本是指當(dāng)集群的一個(gè)分片有2 個(gè)以上節(jié)點(diǎn)時(shí),1 個(gè)節(jié)點(diǎn)通過(guò)選舉成為該分片的領(lǐng)導(dǎo)者,該分片的其他節(jié)點(diǎn)成為副本。其他分片的副本完成子查詢?nèi)蝿?wù)后將子查詢結(jié)果發(fā)送給查詢控制器,查詢控制器匯總所有子查詢結(jié)果并將最終的查詢結(jié)果返回給客戶端完成分布式查詢。
設(shè)集群節(jié)點(diǎn)接收客戶端發(fā)送查詢請(qǐng)求后,構(gòu)造分布式查詢的子查詢并將子查詢?nèi)蝿?wù)分發(fā)給其他分片的副本時(shí)間為tr。
先考慮查詢未命中緩存。執(zhí)行查詢時(shí),由于各節(jié)點(diǎn)性能差異的影響,不同分片的查詢時(shí)間會(huì)有差異,當(dāng)最慢子查詢和最快子查詢完成查詢的時(shí)間段內(nèi)沒(méi)有查詢結(jié)果通過(guò)網(wǎng)絡(luò)傳輸至查詢控制器時(shí),即等待所有子查詢完成后,再依次將數(shù)據(jù)通過(guò)網(wǎng)絡(luò)傳輸至查詢控制器進(jìn)行總查詢結(jié)果的構(gòu)建,此時(shí)得到索引集群的最大查詢時(shí)間Tmax可表示為
式中:tr為子查詢?nèi)蝿?wù)分發(fā)r個(gè)查詢結(jié)果的副本時(shí)間;n為索引集群的分片數(shù);tq(k)為不同分片k各自完成子查詢的時(shí)間;v為不同分片傳輸查詢結(jié)果至查詢控制器的速度;r為所有分片傳輸?shù)目偛樵兘Y(jié)果數(shù);tε為查詢控制器匯總各分片的查詢結(jié)果并形成最終查詢結(jié)果的時(shí)間;ts為集群將查詢結(jié)果返回給客戶端的時(shí)間。
當(dāng)最慢子查詢和最快子查詢完成查詢的時(shí)間段內(nèi)都有查詢結(jié)果通過(guò)網(wǎng)絡(luò)傳輸至查詢控制器時(shí),此時(shí)索引集群的查詢時(shí)間為最小值,即
將式(5)化簡(jiǎn)后可得
由于不同子查詢完成的過(guò)程具有隨機(jī)性,在子查詢執(zhí)行過(guò)程中,不一定所有時(shí)間都進(jìn)行查詢結(jié)果的網(wǎng)絡(luò)傳輸,此處需要引入調(diào)節(jié)因子α(0 ~1),用來(lái)描述網(wǎng)絡(luò)傳輸?shù)睦寐剩朐撜{(diào)節(jié)因子后,得到查詢時(shí)間表達(dá)式為
經(jīng)過(guò)上述分析可知,在未命中緩存的情況下,索引集群的查詢時(shí)間Tc取值為[]Tmin,Tmax區(qū)間的一個(gè)隨機(jī)值。為了便于后續(xù)比較,將式(7)改寫為
當(dāng)查詢命中緩存時(shí),索引集群從緩存中獲取數(shù)據(jù)。設(shè)索引集群從緩存中獲取數(shù)據(jù)的時(shí)間為tqh,此時(shí)索引集群的查詢時(shí)間Th為
索引集群?jiǎn)?dòng)初期,緩存未存儲(chǔ)緩存記錄,導(dǎo)致系統(tǒng)啟動(dòng)初期緩存命中率低。本文設(shè)計(jì)了一種預(yù)熱查詢結(jié)構(gòu),解決索引集群?jiǎn)?dòng)初期緩存命中率低的問(wèn)題。在索引集群?jiǎn)?dòng)初期,設(shè)置熱點(diǎn)數(shù)據(jù)的預(yù)熱查詢,將熱點(diǎn)數(shù)據(jù)提前加載至索引集群緩存中。通過(guò)搜索管理器統(tǒng)計(jì)查詢數(shù)據(jù)的熱度排名,對(duì)排名較高的數(shù)據(jù)設(shè)計(jì)預(yù)熱查詢。
在初始階段,緩存空間存在大量空閑,設(shè)置預(yù)熱查詢的數(shù)據(jù)可以直接存入緩存空間,隨著查詢結(jié)果逐步存入緩存,緩存空間被逐步占滿。當(dāng)緩存占滿時(shí),需要更新緩存記錄,將訪問(wèn)熱度最低的數(shù)據(jù)塊從緩存中剔除,以便將熱度高的數(shù)據(jù)調(diào)入緩存,此時(shí)按照HDL緩存方法更新緩存記錄,然后將新的查詢結(jié)果存入緩存空間,完成緩存更新。
構(gòu)建預(yù)熱查詢后熱點(diǎn)數(shù)據(jù)存儲(chǔ)在緩存中,后續(xù)查詢命中緩存的查詢時(shí)間為式(9)中的Th,未命中緩存的查詢時(shí)間為式(8)中的Tc。將兩者做減法運(yùn)算得到命中一次預(yù)熱查詢帶來(lái)的查詢時(shí)間增益Tg,可表示為
泊松分布用于描述單位時(shí)間內(nèi)隨機(jī)事件發(fā)生的次數(shù),設(shè)計(jì)預(yù)熱查詢的熱點(diǎn)數(shù)據(jù)單位時(shí)間內(nèi)被多次訪問(wèn)的概率服從參數(shù)為λ的泊松分布,泊松分布的概率函數(shù)為
由式(11)可得設(shè)計(jì)預(yù)熱查詢的熱點(diǎn)數(shù)據(jù)單位時(shí)間內(nèi)查詢的次數(shù)等于λ。對(duì)集群設(shè)計(jì)預(yù)熱查詢,用預(yù)熱查詢產(chǎn)生的查詢時(shí)間增益減去構(gòu)建預(yù)熱查詢花費(fèi)的時(shí)間可得
式中,Φ(i)為第i條預(yù)熱查詢時(shí)間函數(shù),其為i的單調(diào)增函數(shù)。由式(12)可得,隨著預(yù)熱查詢數(shù)目i的增加,存在以下3種情況:
(1)當(dāng)i較小時(shí),λTg>Φ(i),即預(yù)熱查詢產(chǎn)生的延遲小于帶來(lái)的時(shí)間增益。
(2)當(dāng)i增加,Φ(i)增加,會(huì)使λTg=Φ(i),即預(yù)熱查詢產(chǎn)生的延遲與帶來(lái)的時(shí)間增益相等。
(3)當(dāng)i增加到一定值,會(huì)使λTg<Φ(i),即預(yù)熱查詢產(chǎn)生的延遲大于帶來(lái)的時(shí)間增益。
由上述分析可知,預(yù)熱查詢數(shù)目i存在極值點(diǎn),此時(shí)設(shè)置預(yù)熱查詢減少的查詢時(shí)間最多。測(cè)試時(shí)不斷增加預(yù)熱查詢數(shù)目,當(dāng)繼續(xù)增加預(yù)熱查詢數(shù)目導(dǎo)致查詢時(shí)間增加時(shí),則未增加前的預(yù)熱查詢數(shù)目為最佳預(yù)熱查詢數(shù)目io,此時(shí)產(chǎn)生的時(shí)間增益最大。
鐵路配電網(wǎng)也屬于電力系統(tǒng)的一部分,運(yùn)行期間會(huì)產(chǎn)生大量的監(jiān)測(cè)數(shù)據(jù),本文以某鐵路10 kV 配電網(wǎng)的數(shù)據(jù)采集與監(jiān)控SCADA(supervisory control and data acquisition)系統(tǒng)導(dǎo)出的監(jiān)測(cè)數(shù)據(jù)為數(shù)據(jù)源,建立數(shù)據(jù)源中站所號(hào)、遙測(cè)名、遙測(cè)值、時(shí)間戳等非主鍵屬性的倒排索引集群,該配電網(wǎng)監(jiān)測(cè)系統(tǒng)示意如圖4所示。

圖4 配電網(wǎng)監(jiān)測(cè)系統(tǒng)示意Fig.4 Schematic of distribution network monitoring system
采用4 臺(tái)計(jì)算機(jī)構(gòu)建倒排索引集群,4 臺(tái)計(jì)算機(jī)的操作系統(tǒng)均為L(zhǎng)inux(Centos7)系統(tǒng),將數(shù)據(jù)導(dǎo)入索引集群,測(cè)試所提技術(shù)的實(shí)際效果。索引集群的4臺(tái)計(jì)算機(jī)節(jié)點(diǎn)的詳細(xì)配置如表1所示。

表1 集群節(jié)點(diǎn)詳細(xì)配置Tab.1 Detailed configuration of cluster nodes
1)不同查詢條件下不同方法的查詢時(shí)間
在配電網(wǎng)監(jiān)測(cè)數(shù)據(jù)索引集群正常運(yùn)行時(shí),分別向集群導(dǎo)入1×107、4×107、8×107、1.2×108、1.6×108條記錄,使用掃描查詢(無(wú)緩存)、HDL緩存查詢、關(guān)系型數(shù)據(jù)庫(kù)方法和HDPL 緩存查詢對(duì)不同重復(fù)度的數(shù)據(jù)進(jìn)行查詢性能測(cè)試。進(jìn)行3 組不同條件的測(cè)試,單線程為只執(zhí)行一個(gè)查詢?nèi)蝿?wù),多線程為執(zhí)行多個(gè)查詢?nèi)蝿?wù)。第1組單線程下執(zhí)行單條件,站所223的查詢;第2組單線程下執(zhí)行雙條件,站所223&遙測(cè)值16390的查詢;第3組多線程下執(zhí)行單條件,站所223的查詢。每組進(jìn)行12次測(cè)試,舍棄最小值和最大值,剩下的10次測(cè)試結(jié)果取平均,測(cè)試結(jié)果如圖5所示。

圖5 不同方法對(duì)比結(jié)果Fig.5 Comparison results of different methods
由圖5 可知,在單條件?單線程查詢條件下,當(dāng)集群數(shù)據(jù)規(guī)模為1× 107條時(shí),HDPL 緩存查詢與HDL緩存查詢時(shí)間相差1 ms,但當(dāng)數(shù)據(jù)規(guī)模增加至1.2×108、1.6×108條時(shí),HDPL 緩存查詢相比于HDL緩存查詢分別減少78 ms、135 ms的查詢時(shí)間;在多條件?單線程查詢條件下,當(dāng)數(shù)據(jù)規(guī)模為1.2×108條時(shí),HDPL 緩存查詢相比于HDL 緩存查詢、關(guān)系型數(shù)據(jù)庫(kù)方法和掃描查詢分別減少了134 ms、192 ms、203 ms,HDPL 緩存查詢的查詢時(shí)間最短;在單條件?多線程查詢條件下,在數(shù)據(jù)規(guī)模分別為1.2×108、1.6×108條時(shí),HDPL緩存查詢相比于HDL緩存查詢的查詢耗時(shí)分別減少84 ms、140 ms。
綜上表明,在不同實(shí)驗(yàn)條件下,HDPL緩存查詢的查詢性能始終優(yōu)于其他3種方法。HDPL緩存查詢通過(guò)尋找局部最優(yōu)解的方式代替尋找全局最優(yōu)解,僅將一部分?jǐn)?shù)據(jù)存儲(chǔ)在鏈表中,減少了緩存空間中存儲(chǔ)數(shù)據(jù)的鏈表長(zhǎng)度及緩存更新時(shí)節(jié)點(diǎn)移動(dòng)操作,避免了額外空間的浪費(fèi),降低了內(nèi)存的消耗。HDPL緩存查詢能夠提高配電網(wǎng)海量監(jiān)測(cè)數(shù)據(jù)索引集群基于非主鍵查詢的查詢性能。
2)數(shù)據(jù)更新時(shí)間間隔對(duì)查詢性能的影響
在配電網(wǎng)監(jiān)測(cè)數(shù)據(jù)索引集群正常運(yùn)行時(shí),向集群導(dǎo)入1.6×108條監(jiān)測(cè)數(shù)據(jù),持續(xù)向集群導(dǎo)入監(jiān)測(cè)數(shù)據(jù),導(dǎo)入監(jiān)測(cè)數(shù)據(jù)的時(shí)間間隔分別為8 ms、16 ms、24 ms、32 ms、40 ms、48 ms和56 ms,使用HDL、HD?PL 方法對(duì)不同重復(fù)度的關(guān)鍵詞數(shù)據(jù)進(jìn)行查詢性能測(cè)試,測(cè)試結(jié)果如圖6所示。

圖6 不同數(shù)據(jù)更新間隔時(shí)查詢性能比較Fig.6 Comparison of query performance at different data update intervals
由圖6 可知,在不同的數(shù)據(jù)更新間隔時(shí),HDPL緩存查詢的查詢時(shí)間始終在21 ms左右,波動(dòng)較小,而HDL 緩存查詢的查詢時(shí)間為125 ms 左右,查詢時(shí)間在一定的范圍內(nèi)波動(dòng);HDPL 緩存方法始終優(yōu)于HDL 緩存方法,且在間隔時(shí)間為16 ms 時(shí),HDPL緩存查詢相比于HDL 緩存查詢能夠節(jié)省111 ms 查詢時(shí)間。相比于HDL 緩存方法,HDPL 緩存方法在存儲(chǔ)部分緩存記錄的鏈表中更新緩存記錄,降低內(nèi)存的消耗,節(jié)省內(nèi)存空間。
執(zhí)行查詢請(qǐng)求,利用查詢管理器獲取熱點(diǎn)數(shù)據(jù);之后針對(duì)熱點(diǎn)數(shù)據(jù)設(shè)置預(yù)熱查詢,改變預(yù)熱查詢的設(shè)置數(shù)目,測(cè)試查詢時(shí)間的變化。在集群數(shù)據(jù)規(guī)模為1.6×108條時(shí)進(jìn)行4組不同條件的測(cè)試:第1組未設(shè)置預(yù)熱查詢;第2 組構(gòu)建3 條熱點(diǎn)數(shù)據(jù)的預(yù)熱查詢,分別為站所223、遙測(cè)16390、3 400.000 00;第3 組構(gòu)建4 條熱點(diǎn)數(shù)據(jù)的預(yù)熱查詢,分別為站所223、遙測(cè)16390、3 400.000 00 和站所443;第4 組構(gòu)建5條熱點(diǎn)數(shù)據(jù)的預(yù)熱查詢,分別為站所223、遙測(cè)16390、3 400.000 00、站所443和遙測(cè)16391。
預(yù)熱查詢數(shù)目對(duì)查詢性能影響的測(cè)試結(jié)果如圖7 所示。單條件查詢?yōu)檎舅?23,雙條件查詢?yōu)檎舅?23&遙測(cè)16390,三條件查詢?yōu)檎舅?23&遙測(cè)16390&3 400.000 00。

圖7 預(yù)熱查詢數(shù)目對(duì)查詢時(shí)間的影響Fig.7 Impact of the number of preheated queries on query time
圖7(a)為在單線程下對(duì)比設(shè)置不同預(yù)熱查詢數(shù)目和未設(shè)置預(yù)熱查詢的查詢時(shí)間。由圖7(a)可知,在單線程、單條件查詢且未設(shè)置預(yù)熱查詢時(shí),查詢時(shí)間為301 ms,設(shè)置3條預(yù)熱查詢時(shí),查詢時(shí)間為277 ms;增加預(yù)熱查詢數(shù)目至4、5條,查詢時(shí)間分別增長(zhǎng)至287 ms、292 ms;設(shè)置3條預(yù)熱查詢減少的查詢時(shí)間最多,對(duì)應(yīng)式(12)的情況(1)。在三條件查詢時(shí),預(yù)熱數(shù)目為5 條時(shí),對(duì)應(yīng)式(12)的情況(2),此時(shí)預(yù)熱查詢產(chǎn)生的時(shí)間增益和產(chǎn)生的延遲相等。對(duì)于雙條件、三條件查詢,均為設(shè)置3 條預(yù)熱查詢時(shí)查詢時(shí)間最短,減少的查詢時(shí)間最大值為48 ms。預(yù)熱查詢條數(shù)i=3、4、5 時(shí)均能減少查詢時(shí)間,其中,i=3 時(shí)減少的查詢時(shí)間最多。
圖7(b)為多線程下對(duì)比設(shè)置不同預(yù)熱查詢數(shù)目和未設(shè)置預(yù)熱查詢的查詢時(shí)間。由圖7(b)可知,在多線程下,三條件查詢且未設(shè)置預(yù)熱查詢時(shí),查詢時(shí)間為752 ms,設(shè)置3 條預(yù)熱查詢時(shí)的查詢時(shí)間為712 ms;在預(yù)熱查詢數(shù)目為4條時(shí),對(duì)比設(shè)置3條預(yù)熱查詢,查詢時(shí)間有所增加;在預(yù)熱查詢數(shù)目為5條時(shí),查詢時(shí)間大于未設(shè)置預(yù)熱查詢的查詢時(shí)間,對(duì)應(yīng)式(12)的情況(3)。上述結(jié)果說(shuō)明多線程下三條件查詢的最佳預(yù)熱數(shù)目為3 條;雙條件查詢時(shí),i=3 為最佳預(yù)熱查詢數(shù)目,減少的查詢時(shí)間為72 ms;在單條件查詢時(shí),最佳預(yù)熱查詢數(shù)目為i=4,此時(shí)減少80 ms的查詢時(shí)間。
通過(guò)熱點(diǎn)數(shù)據(jù)部分鏈表緩存方法的研究,算例測(cè)試了不同條件的查詢和預(yù)熱查詢的影響,測(cè)試結(jié)果表明以下結(jié)論。
(1)在不同查詢條件下,HDPL方法均優(yōu)于其他3 種方法;在不同數(shù)據(jù)更新間隔下,HDPL 緩存查詢的查詢時(shí)間波動(dòng)較小,且始終優(yōu)于HDL 緩存查詢,在數(shù)據(jù)更新間隔為16 ms時(shí),HDPL緩存查詢相比于HDL 緩存查詢能夠節(jié)省111 ms 的查詢時(shí)間。測(cè)試結(jié)果驗(yàn)證了所設(shè)計(jì)的HDPL 分布緩存方法能有效減少集群的查詢時(shí)間。
(2)單線程下均為在預(yù)熱數(shù)目i=3 時(shí)減少的查詢時(shí)間最多;多線程下,雙條件、三條件查詢時(shí),均為i=3 時(shí)減少的查詢時(shí)間最多;單條件查詢時(shí),i=4 減少的查詢時(shí)間最多。測(cè)試結(jié)果驗(yàn)證了設(shè)計(jì)的預(yù)熱查詢存在最佳數(shù)目,且能夠?qū)崿F(xiàn)搜索器的熱啟動(dòng),有效減少查詢時(shí)間,提高集群工作效率。
電力系統(tǒng)及其自動(dòng)化學(xué)報(bào)2024年1期