屈志堅(jiān),范明明,趙 亮,朱 丹,孫旭兵,王子瀟
(1.華東交通大學(xué) 電氣與自動(dòng)化工程學(xué)院,江西 南昌 330013; 2. 常州市軌道交通發(fā)展有限公司,江蘇 常州 213000)
隨著我國(guó)高速鐵路規(guī)模越來(lái)越大,牽引供電系統(tǒng)、鐵路電力系統(tǒng)、鐵路通信信號(hào)電源和接觸網(wǎng)隔離開(kāi)關(guān)等四電設(shè)備的綜合調(diào)度監(jiān)控,已逐步應(yīng)用于高速客運(yùn)專線供電系統(tǒng)所有重要高、低壓回路,納入近全景采集的鐵路配電網(wǎng)、牽引變電網(wǎng)及接觸網(wǎng)等各類測(cè)控終端和監(jiān)控線路中,使鐵路供電綜合調(diào)度監(jiān)測(cè)系統(tǒng)采集信息呈指數(shù)級(jí)增長(zhǎng)[1-4]。據(jù)調(diào)研,浙贛鐵路10 kV電力調(diào)度監(jiān)控系統(tǒng)僅2個(gè)月獲取監(jiān)測(cè)數(shù)據(jù)量即達(dá)300 GB以上,按此計(jì)算,1年監(jiān)測(cè)數(shù)據(jù)量為1.8 TB,以服役期15年算,總存儲(chǔ)量可達(dá)27 TB,監(jiān)測(cè)數(shù)據(jù)的體量明顯超出了常規(guī)關(guān)系數(shù)據(jù)庫(kù)TB級(jí)容量限制[5],且數(shù)據(jù)體量的增長(zhǎng)速度遠(yuǎn)超計(jì)算機(jī)性能的增長(zhǎng),在工程中須進(jìn)行轉(zhuǎn)存儲(chǔ)處理,否則就會(huì)由于鐵路10 kV電力系統(tǒng)監(jiān)測(cè)數(shù)據(jù)體量的持續(xù)增大使系統(tǒng)響應(yīng)速度達(dá)到1 min左右,而該系統(tǒng)的查詢響應(yīng)時(shí)間應(yīng)控制在百毫秒級(jí)。海量監(jiān)測(cè)數(shù)據(jù)一方面增加了系統(tǒng)的維護(hù)工作量,另一方面使傳統(tǒng)數(shù)據(jù)存取方式產(chǎn)生越來(lái)越大的延遲,千萬(wàn)級(jí)以上的海量監(jiān)測(cè)數(shù)據(jù)查詢響應(yīng)慢易造成調(diào)度界面卡屏,影響調(diào)度信息的實(shí)時(shí)處理,嚴(yán)重時(shí)甚至可能導(dǎo)致關(guān)鍵故障信息的遲報(bào)、漏報(bào)甚至丟失,威脅行車安全[6]。因此,迫切需要研究鐵路供電監(jiān)測(cè)的高效查詢響應(yīng)技術(shù),提出新的海量監(jiān)測(cè)數(shù)據(jù)的快速處理方法[7]。
現(xiàn)有針對(duì)海量監(jiān)測(cè)數(shù)據(jù)快速查詢問(wèn)題的研究方法主要分為兩大類。第一類為擴(kuò)展數(shù)據(jù)庫(kù)方法,具體有2種:①采用分布式磁盤數(shù)據(jù)庫(kù)技術(shù)[8],通過(guò)將海量監(jiān)測(cè)數(shù)據(jù)存入分布式數(shù)據(jù)庫(kù)中,把數(shù)據(jù)分別存儲(chǔ)在不同主機(jī)磁盤上,與關(guān)系數(shù)據(jù)庫(kù)相比,可利用分布式磁盤數(shù)據(jù)庫(kù)擴(kuò)展存儲(chǔ)海量監(jiān)測(cè)數(shù)據(jù),但由于數(shù)據(jù)仍存儲(chǔ)于硬盤介質(zhì),存取實(shí)時(shí)性受到限制[9],難以滿足海量監(jiān)測(cè)數(shù)據(jù)的快速存取需求。②采用內(nèi)存數(shù)據(jù)庫(kù)技術(shù)[10],將監(jiān)測(cè)實(shí)時(shí)數(shù)據(jù)駐留內(nèi)存,獲得比關(guān)系數(shù)據(jù)庫(kù)快幾個(gè)數(shù)量級(jí)的存取速度,隨機(jī)訪問(wèn)時(shí)間可達(dá)0.05 ms,約為磁盤訪問(wèn)的5‰,但內(nèi)存數(shù)據(jù)庫(kù)容量易受物理內(nèi)存的限制,如俄羅斯Knizhnik研發(fā)的開(kāi)放內(nèi)存數(shù)據(jù)庫(kù)FastDB,嵌入式內(nèi)存數(shù)據(jù)庫(kù)SQLite,容量均限制為100 GB以內(nèi),內(nèi)存造價(jià)高,存儲(chǔ)空間遠(yuǎn)小于磁盤容量,難以擴(kuò)展。
鑒于高速鐵路供電數(shù)據(jù)的典型特征是集群化處理,另一類解決方法是使用集群技術(shù),具體有2種:一種為使用Hive查詢引擎對(duì)數(shù)據(jù)預(yù)處理[11-12],將海量監(jiān)測(cè)數(shù)據(jù)映射為數(shù)據(jù)表,并將查詢命令轉(zhuǎn)換為MapReduce操作進(jìn)行批量查詢處理,但MapReduce進(jìn)程的查詢啟動(dòng)慢、開(kāi)銷大,文獻(xiàn)[13]中使用Hive查詢引擎查詢千萬(wàn)級(jí)數(shù)據(jù)耗時(shí)達(dá)120 s,難以滿足海量監(jiān)測(cè)數(shù)據(jù)的快速查詢要求。另一種為基于非關(guān)系型(Not only SQL,NoSQL)HBase數(shù)據(jù)庫(kù)集群,通過(guò)熱點(diǎn)緩存和熱點(diǎn)評(píng)分處理,將數(shù)據(jù)量大、出現(xiàn)頻繁的數(shù)據(jù)駐留HBase數(shù)據(jù)庫(kù)集群節(jié)點(diǎn)緩存,檢索時(shí)可直接從緩存中搜索結(jié)果[14-16]。但一方面,由于常規(guī)熱點(diǎn)緩存(Hotspot-Cache Query,H-CQ)技術(shù)通過(guò)更新關(guān)鍵詞索引緩存的時(shí)間戳,區(qū)分緩存被訪問(wèn)的頻繁度,為避免同時(shí)讀寫時(shí)間戳沖突,需對(duì)數(shù)據(jù)更新操作加互斥鎖,同一時(shí)間只允許一個(gè)線程操作,須等待寫入完成才能進(jìn)入查詢線程,故對(duì)多線程讀寫操作支持不夠,而牽引負(fù)荷波動(dòng)幅度大且變化頻繁,間歇短時(shí)過(guò)負(fù)荷甚至超出200%,母線電壓波動(dòng)超出20%,因此監(jiān)測(cè)數(shù)據(jù)的頻繁更新將使常規(guī)H-CQ技術(shù)的多線程讀寫性能受到較大影響。另一方面因HBase數(shù)據(jù)庫(kù)集群是一種以鍵值對(duì)形式存儲(chǔ)的數(shù)據(jù)庫(kù),對(duì)非主行鍵索引查詢的支持不夠,難以滿足鐵路供電監(jiān)測(cè)系統(tǒng)按站所和設(shè)備編號(hào)等非主行鍵快速查詢的要求,若能利用倒排索引技術(shù)改變數(shù)據(jù)存取結(jié)構(gòu)[17],從非主行鍵進(jìn)行索引定位,就可完成非主行鍵數(shù)據(jù)的快速搜索,同時(shí),改變H-CQ技術(shù)的更新替換方法,避免緩存時(shí)間戳操作,以提高H-CQ技術(shù)的多線程讀寫性能,該研究尚未見(jiàn)文獻(xiàn)報(bào)道。
本文設(shè)計(jì)出了一種新的基于倒排二級(jí)索引結(jié)構(gòu)的熱點(diǎn)緩存替換(Hotspot-Cache Replace Query,H-CRQ)技術(shù),改變鐵路供電監(jiān)測(cè)數(shù)據(jù)索引結(jié)構(gòu)以實(shí)現(xiàn)在鐵路供電監(jiān)測(cè)集群中進(jìn)行關(guān)鍵詞查詢,并在倒排索引的熱度緩存環(huán)節(jié)中設(shè)計(jì)訪問(wèn)順序編碼,通過(guò)順序編碼更新淘汰緩存數(shù)據(jù),避免對(duì)緩存時(shí)間戳系統(tǒng)屬性操作,提高熱點(diǎn)緩存處理在鐵路供電監(jiān)測(cè)集群中的多線程讀寫性能。以工程實(shí)測(cè)數(shù)據(jù)進(jìn)行算例測(cè)試,驗(yàn)證本文所提集群監(jiān)控處理的新方法,可有效提高鐵路調(diào)度監(jiān)測(cè)海量數(shù)據(jù)查詢效率與多線程讀寫性能。
鐵路供電系統(tǒng)與設(shè)施是鐵路行車裝備的重要組成部分,沿線的車站、變電站、接觸網(wǎng)等設(shè)備裝配有大量電壓互感器、電流互感器和各類傳感器,收集了大量運(yùn)行參數(shù)信息,同時(shí)測(cè)控終端的采樣頻率越來(lái)越高,使監(jiān)測(cè)數(shù)據(jù)體量越來(lái)越大,數(shù)據(jù)采集過(guò)程見(jiàn)圖1。
鐵路供電監(jiān)測(cè)系統(tǒng)的終端單元,如遠(yuǎn)程控制終端(RTU)、饋線終端設(shè)備(FTU)、信號(hào)電源監(jiān)控終端(STU)、開(kāi)閉所測(cè)控終端(DTU)、變壓器監(jiān)測(cè)終端(TTU)等,裝有大量傳感器和互感器,收集鐵道供電系統(tǒng)的供電設(shè)備參數(shù)、信號(hào)電源狀態(tài)、配電所變壓器運(yùn)行狀況、開(kāi)關(guān)設(shè)備運(yùn)行參數(shù)以及報(bào)警信息等數(shù)據(jù),通過(guò)通信網(wǎng)絡(luò)傳遞給通信前置機(jī)。通信前置機(jī)按統(tǒng)一標(biāo)準(zhǔn)將監(jiān)測(cè)數(shù)據(jù)解析處理后上傳至調(diào)度中心HBase海量數(shù)據(jù)庫(kù)集群,生成監(jiān)測(cè)數(shù)據(jù)的倒排索引進(jìn)行存儲(chǔ)并運(yùn)用H-CRQ技術(shù)將熱點(diǎn)部分存儲(chǔ)在分布式集群緩存中,集群調(diào)度工作站通過(guò)海量數(shù)據(jù)庫(kù)集群查詢讀取監(jiān)測(cè)數(shù)據(jù)和報(bào)警信息,對(duì)鐵路供電系統(tǒng)運(yùn)行狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)控并調(diào)度管理,形成鐵路供電海量數(shù)據(jù)集群監(jiān)控的信息流。
圖1 鐵路供電監(jiān)控系統(tǒng)數(shù)據(jù)的采集
鐵路供電調(diào)度系統(tǒng)的主要任務(wù)是監(jiān)視整個(gè)鐵路供電系統(tǒng)的電氣設(shè)備運(yùn)行狀態(tài)并調(diào)度管理,實(shí)際工程應(yīng)用中存在需根據(jù)調(diào)度人員的需求查找特定數(shù)據(jù)的場(chǎng)景,例如在鐵路供電調(diào)度系統(tǒng)中通過(guò)采集時(shí)間和站所號(hào)查看某一時(shí)間該站所有設(shè)備的運(yùn)行狀態(tài)或是通過(guò)測(cè)控終端編號(hào)查看某一測(cè)電氣設(shè)備隨時(shí)間變化的運(yùn)行狀態(tài)報(bào)表,如何在海量監(jiān)測(cè)數(shù)據(jù)中快速定位數(shù)據(jù)是搜索的關(guān)鍵。圖1中鐵路供電監(jiān)測(cè)數(shù)據(jù)存入數(shù)據(jù)庫(kù)集群時(shí)會(huì)生成主行鍵Id作為惟一標(biāo)識(shí)編號(hào),而監(jiān)測(cè)數(shù)據(jù)中的測(cè)控終端編號(hào)、采樣值、采集時(shí)間、歸屬站所等屬于非主行鍵。由于HBase數(shù)據(jù)庫(kù)是一種以鍵值對(duì)形式存儲(chǔ)的數(shù)據(jù),對(duì)非主行鍵查詢支持不夠,因此設(shè)計(jì)一種監(jiān)測(cè)數(shù)據(jù)的倒排索引結(jié)構(gòu)。倒排索引以關(guān)鍵詞為索引核心和鏈表訪問(wèn)入口,由屬性值及該屬性值所屬數(shù)據(jù)的地址組成,由于不通過(guò)數(shù)據(jù)主行鍵,而是非主行鍵關(guān)鍵詞來(lái)定位數(shù)據(jù),所以稱為倒排索引。
倒排索引的儲(chǔ)存形式定義為關(guān)鍵詞及它的位置、主行鍵Id,在查詢時(shí)直接根據(jù)關(guān)鍵詞檢索,避免逐條查找數(shù)據(jù)。以鐵道供電監(jiān)測(cè)數(shù)據(jù)記錄為例,描述倒排索引設(shè)計(jì),見(jiàn)圖2。包括數(shù)據(jù)主行鍵Id,鐵道供電監(jiān)控終端的采集時(shí)間Timestamp,歸屬站所Station,測(cè)控終端編號(hào)Rtu,采集對(duì)象標(biāo)識(shí)Analogname以及采樣值A(chǔ)nalogvalue。
圖2 鐵路供電監(jiān)測(cè)數(shù)據(jù)的倒排索引設(shè)計(jì)
如圖2所示,鐵道供電監(jiān)測(cè)數(shù)據(jù)記錄正序索引搜索關(guān)鍵詞時(shí)需按搜索要求逐條索引對(duì)比,對(duì)關(guān)鍵詞的搜索效率不高。重新構(gòu)造的倒排索引,由監(jiān)測(cè)信息表中關(guān)鍵詞及其出現(xiàn)的位置組成,如關(guān)鍵詞“站所443”,出現(xiàn)位置為“Id:1_Station”“Id:1_Rtu”“Id:2_Station”“Id:2_Rtu”,其中“Id:1_Station”代表關(guān)鍵詞出現(xiàn)位置為主行鍵Id為1,列名為Station。這種倒排索引結(jié)構(gòu)可直接根據(jù)關(guān)鍵詞索引數(shù)據(jù)位置,通過(guò)二級(jí)索引快速定位目標(biāo)數(shù)據(jù)。
在HBase數(shù)據(jù)庫(kù)分布式存儲(chǔ)的基礎(chǔ)上,利用倒排索引設(shè)計(jì)一種鐵路供電監(jiān)測(cè)數(shù)據(jù)的二級(jí)索引方法,二級(jí)索引系統(tǒng)的讀寫訪問(wèn)架構(gòu)見(jiàn)圖3。
圖3 鐵路供電海量監(jiān)測(cè)數(shù)據(jù)二級(jí)索引設(shè)計(jì)
以向鐵路調(diào)度監(jiān)測(cè)系統(tǒng)寫入如圖2所示的鐵路供電監(jiān)測(cè)數(shù)據(jù)為例,說(shuō)明該架構(gòu)實(shí)現(xiàn)二級(jí)索引的具體步驟,見(jiàn)圖3。
(1)鐵路調(diào)度監(jiān)測(cè)系統(tǒng)的二級(jí)索引查詢架構(gòu)見(jiàn)圖3(a),寫入數(shù)據(jù)時(shí):
wd1:數(shù)據(jù)“Id:1,Timestamp: 2018-09-24 00:00: 00.04,Station:站所443,Rtu:站所443,Analogname:遙測(cè)16385,Analogvalue:1800.0”寫入鐵路供電調(diào)度系統(tǒng)中。
wd2:鐵路供電調(diào)度客戶端將正序監(jiān)測(cè)數(shù)據(jù)存入HBase數(shù)據(jù)庫(kù)集群。
wd3:更新HBase數(shù)據(jù)庫(kù)集群正序監(jiān)測(cè)數(shù)據(jù),重新構(gòu)造索引結(jié)構(gòu)同步至倒排索引庫(kù)完成更新。
(2)讀取數(shù)據(jù)時(shí),通過(guò)二級(jí)索引架構(gòu)讀取:
rd1:在鐵路供電調(diào)度主機(jī)客戶端查詢界面中輸入所需數(shù)據(jù)關(guān)鍵詞,如“Analogname:遙測(cè)16385”等。
rd2:調(diào)度客戶端在倒排索引庫(kù)中找出“Analogname:遙測(cè)16385”的倒排索引。
rd3:調(diào)度客戶端根據(jù)所得倒排索引在集群HBase數(shù)據(jù)庫(kù)中檢索相應(yīng)數(shù)據(jù)。
該架構(gòu)實(shí)現(xiàn)二級(jí)索引查詢的具體步驟見(jiàn)圖3(b)。在調(diào)度主機(jī)查詢界面輸入數(shù)據(jù)非主行鍵關(guān)鍵詞,如“遙測(cè)16385”;鐵路供電監(jiān)測(cè)集群將接收的倒排索引查詢請(qǐng)求送至集群節(jié)點(diǎn)協(xié)調(diào)器,分發(fā)給集群節(jié)點(diǎn)倒排索引庫(kù)。倒排索引庫(kù)將檢索到的關(guān)鍵詞“遙測(cè)16385”相應(yīng)倒排索引“Id:1_Analogname”返回監(jiān)測(cè)集群;監(jiān)測(cè)集群根據(jù)接收的倒排索引主行鍵“Id:1”發(fā)出主行鍵查詢?nèi)蝿?wù)給集群節(jié)點(diǎn)協(xié)調(diào)器,分發(fā)給集群各節(jié)點(diǎn)HBase數(shù)據(jù)庫(kù)中進(jìn)行搜索。數(shù)據(jù)庫(kù)進(jìn)行一級(jí)索引,將主行鍵“Id:1”對(duì)應(yīng)的數(shù)據(jù)返回鐵路供電監(jiān)測(cè)集群和調(diào)度主機(jī)。
通過(guò)非主行鍵條件查詢快速定位所查數(shù)據(jù)主行鍵,再按主行鍵查詢到調(diào)度主機(jī)需要的數(shù)據(jù),以實(shí)現(xiàn)非主行鍵的二級(jí)索引和快速查詢。
由于監(jiān)測(cè)數(shù)據(jù)庫(kù)體量大,采集時(shí)間、歸屬站所、測(cè)控終端編號(hào)等關(guān)鍵詞重復(fù)度高,鐵路供電調(diào)度系統(tǒng)進(jìn)行監(jiān)測(cè)和報(bào)警信息查詢時(shí),關(guān)鍵詞查詢結(jié)果過(guò)多影響讀取速度,導(dǎo)致調(diào)度系統(tǒng)工作效率下降,可將這部分關(guān)鍵詞倒排索引存入鐵路供電調(diào)度集群的緩存中處理。而單臺(tái)調(diào)度主機(jī)緩存處理能力有限,所以在HBase數(shù)據(jù)庫(kù)集群中設(shè)置分布式緩存空間,實(shí)現(xiàn)多臺(tái)集群節(jié)點(diǎn)緩存資源的共享,緩存查詢系統(tǒng)工作流程見(jiàn)圖4。
圖4 緩存查詢工作流程圖
調(diào)度主機(jī)客戶端接收查詢請(qǐng)求,先檢查鐵路供電監(jiān)測(cè)集群管理節(jié)點(diǎn)緩存是否存有此關(guān)鍵詞檢索結(jié)果。若無(wú),則由任務(wù)調(diào)度模塊將請(qǐng)求轉(zhuǎn)發(fā)到其余鐵路供電監(jiān)測(cè)集群節(jié)點(diǎn)中繼續(xù)查詢。如果檢索到相應(yīng)緩存,則將查詢結(jié)果送至調(diào)度客戶端,同時(shí)更新緩存中此條記錄的相關(guān)信息。若所有集群節(jié)點(diǎn)均未緩存所需信息,將請(qǐng)求轉(zhuǎn)發(fā)至倒排索引庫(kù)中查詢。當(dāng)集群倒排索引庫(kù)中未儲(chǔ)存相應(yīng)數(shù)據(jù)時(shí),將“無(wú)相應(yīng)記錄”返回調(diào)度客戶端。當(dāng)檢索到相應(yīng)數(shù)據(jù)時(shí)將查詢結(jié)果送至調(diào)度客戶端,同時(shí)將查詢結(jié)果加入緩存,緩存服務(wù)器需要檢查緩存區(qū)是否存滿,若不滿則寫入緩存,否則刪除部分緩存寫入新數(shù)據(jù)。
直接按加入緩存順序刪除已有數(shù)據(jù)緩存的原生替換方法未考慮參考時(shí)間、歸屬站所、測(cè)控終端編號(hào)等重復(fù)度高的熱點(diǎn)關(guān)鍵詞進(jìn)出緩存機(jī)制,可以通過(guò)熱點(diǎn)緩存技術(shù)將熱點(diǎn)關(guān)鍵詞駐留緩存,提高搜索效率。
緩存系統(tǒng)從邏輯上包括調(diào)度層和緩存層:調(diào)度層管理調(diào)度主機(jī)與集群節(jié)點(diǎn)緩存及數(shù)據(jù)交換,由節(jié)點(diǎn)管理模塊和任務(wù)調(diào)度模塊組成;緩存層包括緩存更新模塊和緩存替換模塊,對(duì)集群緩存中數(shù)據(jù)進(jìn)行更新與淘汰,緩存系統(tǒng)架構(gòu)見(jiàn)圖5。
圖5 緩存系統(tǒng)架構(gòu)
在緩存系統(tǒng)處理時(shí),將關(guān)鍵詞查詢的倒排索引結(jié)果,如關(guān)鍵詞“站所173”位置為“Id:4_Station”,“站所427”位置為“Id:3_Rtu”,“1800.0”位置為“Id:1_Analogvalue”等儲(chǔ)存在緩存中。H-CQ方法儲(chǔ)存結(jié)構(gòu)為鏈表,系統(tǒng)初始階段緩存大量空閑,記錄直接寫入緩存,按寫入順序?qū)㈥P(guān)鍵詞及其位置保存于緩存中。當(dāng)緩存空間存滿,緩存系統(tǒng)開(kāi)始根據(jù)替換方法對(duì)緩存中的記錄進(jìn)行淘汰替換。
H-CQ方法以緩存歷史訪問(wèn)時(shí)間進(jìn)行替換,若緩存近期被訪問(wèn),則未來(lái)可能被再次訪問(wèn),緩存未被訪問(wèn)的時(shí)間越長(zhǎng),未來(lái)再次被訪問(wèn)的概率越低,當(dāng)緩存空間存滿時(shí),將未被訪問(wèn)時(shí)間最久的數(shù)據(jù)淘汰,熱點(diǎn)緩存淘汰過(guò)程見(jiàn)圖6。
圖6 熱點(diǎn)緩存淘汰過(guò)程
以關(guān)鍵詞倒排索引查詢結(jié)果集“索引結(jié)果1”到“索引結(jié)果8”,組成鏈表式緩存存儲(chǔ)在集群節(jié)點(diǎn)的緩存中,當(dāng)調(diào)度主機(jī)提交查詢申請(qǐng)“站所443”時(shí),檢查緩存空間可得“索引結(jié)果9(關(guān)鍵詞:站所443,出現(xiàn)位置:Id:2_Rtu)”并未存入緩存,則將“索引結(jié)果9”保存至緩存中鏈表式緩存結(jié)構(gòu)的頭部,并把尾部未被訪問(wèn)時(shí)間最長(zhǎng)的記錄“索引結(jié)果8”從緩存中刪除。當(dāng)調(diào)度主機(jī)提交查詢申請(qǐng)“遙測(cè)16385”時(shí),可得“索引結(jié)果4(關(guān)鍵詞:遙測(cè)16385,出現(xiàn)位置Id:4_ Analogname)”已存入緩存,則直接將“索引結(jié)果4”緩存記錄返回調(diào)度主機(jī),再把“索引結(jié)果4”提到鏈表式緩存結(jié)構(gòu)的頭部,其余數(shù)據(jù)順次后移。
H-CQ方法管理更新緩存記錄的時(shí)間戳,淘汰時(shí)根據(jù)時(shí)間戳淘汰未被訪問(wèn)時(shí)間最長(zhǎng)的倒排索引記錄,保留被訪問(wèn)可能性較高的記錄。但為避免同時(shí)讀寫時(shí)間戳沖突,同一時(shí)間只允許一個(gè)線程對(duì)時(shí)間戳操作,對(duì)讀寫操作加互斥鎖,故H-CQ方法對(duì)多線程讀寫的支持不夠。
在工程應(yīng)用中,鐵路供電監(jiān)測(cè)數(shù)據(jù)實(shí)時(shí)寫入,若緩存系統(tǒng)僅支持單線程讀寫將嚴(yán)重影響讀寫效率,因此設(shè)計(jì)了一種新的熱點(diǎn)緩存的淘汰策略,對(duì)H-CQ方法進(jìn)行改進(jìn)。改進(jìn)的H-CRQ方法為每個(gè)緩存記錄添加一個(gè)順序編碼AccessNum,表示訪問(wèn)順序號(hào),通過(guò)順序編碼管理更新緩存,避免對(duì)時(shí)間戳系統(tǒng)屬性進(jìn)行操作,提高H-CQ方法的多線程讀寫能力。同時(shí)設(shè)計(jì)一個(gè)自增型整數(shù)變量X,新增或訪問(wèn)緩存記錄時(shí)將X賦值給AccessNum并不斷自增。
改進(jìn)的H-CRQ方法先設(shè)定期望保存的緩存記錄數(shù)為KeepNum,期望刪除的緩存記錄數(shù)為RemoveNum,Xmax為變量X當(dāng)前的值,Xmin為遍歷緩存后記錄中AccessNum的最小值。緩存更新時(shí),遍歷關(guān)鍵詞索引緩存,對(duì)AccessNum進(jìn)行討論:
(1)若某一倒排緩存記錄的AccessNum (2)若某一倒排緩存記錄的AccessNum>Xmax+KeepNum,表示該緩存記錄在近期被訪問(wèn)過(guò),保留符合此條件的緩存; (3)對(duì)于Xmin+RemoveNum≤AccessNum≤Xmax+KeepNum的緩存記錄,若一次遍歷直接將緩存記錄數(shù)量降到了KeepNum,則完成淘汰過(guò)程;若仍需繼續(xù)淘汰關(guān)鍵詞索引緩存,則對(duì)符合此條件的緩存重新遍歷。如此反復(fù)淘汰,可使緩存容量降至KeepNum。 緩存空間的大小L為鏈表長(zhǎng)度,即關(guān)鍵詞索引緩存記錄從鏈表頭部到尾部被淘汰的替換次數(shù),可反映緩存替換方法的更新速度。緩存記錄被放入緩存后若在被淘汰前被再次訪問(wèn)視為緩存被命中,命中率代表監(jiān)測(cè)數(shù)據(jù)集群進(jìn)行的非主行鍵查詢時(shí)該關(guān)鍵詞索引已被緩存的概率。 因冪律分布適用于描述關(guān)鍵詞的重復(fù)度與被使用頻率的關(guān)系,所以關(guān)鍵詞被查詢的次數(shù)分布服從冪律分布,被查詢的頻率與它重復(fù)度排名的常數(shù)次冪成反比關(guān)系 pr∝r-c (1) 式中:pr為按重復(fù)度排名后,排序?yàn)閞的關(guān)鍵詞被查詢?cè)L問(wèn)的概率;c為冪律函數(shù)的常數(shù)。 根據(jù)熱點(diǎn)緩存方法的替換策略,將按重復(fù)度排名后,排序?yàn)閞的關(guān)鍵詞索引結(jié)果緩存記錄于緩存空間的概率,表示為 (2) 由于緩存空間包含有L個(gè)關(guān)鍵詞索引結(jié)果緩存,令改進(jìn)熱點(diǎn)緩存算法的命中率為P,可得到命中率P的計(jì)算式 (3) 由于泊松分布用于描述單位時(shí)間內(nèi)隨機(jī)事件發(fā)生的次數(shù),故關(guān)鍵詞單位時(shí)間內(nèi)被多次訪問(wèn)的概率服從泊松分布,由此可得排序?yàn)閞的關(guān)鍵詞單位時(shí)間內(nèi)查詢k次的概率Pt為 (4) 結(jié)合式(3)、式(4)可得,單位時(shí)間內(nèi)排序?yàn)閞的關(guān)鍵詞被查詢k次的命中率P′為 P′(Xr=k)=PtP= (5) 從式(5)可得,緩存空間的大小L對(duì)熱點(diǎn)緩存算法的命中率P′有影響,呈正相關(guān)的關(guān)系。但根據(jù)最近最小使用原則,熱點(diǎn)緩存容量一般設(shè)置為當(dāng)前可用內(nèi)存容量的1/8,緩存空間設(shè)置過(guò)大會(huì)影響計(jì)算機(jī)處理性能,導(dǎo)致查詢的實(shí)時(shí)性下降。 以天水—蘭州鐵路10 kV供電監(jiān)測(cè)系統(tǒng)導(dǎo)出的實(shí)測(cè)工程數(shù)據(jù)為算例,其供電示意圖見(jiàn)圖7。 圖7 鐵道供電監(jiān)測(cè)系統(tǒng)算例示意圖 根據(jù)鐵路供電監(jiān)測(cè)系統(tǒng)工程中的典型調(diào)度監(jiān)測(cè)主站配置,設(shè)置2臺(tái)數(shù)據(jù)服務(wù)器和2臺(tái)主、備調(diào)度工作站搭建集群,在CentOS 6.8系統(tǒng)環(huán)境下,部署1個(gè)主節(jié)點(diǎn)和3個(gè)工作節(jié)點(diǎn)的鐵路供電監(jiān)測(cè)數(shù)據(jù)非主行鍵查詢集群,集群環(huán)境參數(shù)見(jiàn)表1。 以遙測(cè)數(shù)據(jù)的采集時(shí)間Timestamp,歸屬站所Station,測(cè)控終端編號(hào)Rtu,采集對(duì)象標(biāo)識(shí)Analogname以及采樣值A(chǔ)nalogvalue進(jìn)行測(cè)試,對(duì)非主行鍵數(shù)據(jù)建立二級(jí)索引,測(cè)試設(shè)置緩存大小L對(duì)集群監(jiān)控查詢性能的影響及H-CRQ方法的查詢性能。 表1 鐵路供電監(jiān)測(cè)數(shù)據(jù)非主行鍵查詢集群環(huán)境 使用鐵路供電監(jiān)測(cè)數(shù)據(jù)非主行鍵查詢集群,分別在一主一備模式和鐵路供電監(jiān)測(cè)“四機(jī)集群+查詢測(cè)試機(jī)”模式下,導(dǎo)入1.6×109條鐵路10 kV供電監(jiān)測(cè)數(shù)據(jù)記錄,并持續(xù)向集群數(shù)據(jù)庫(kù)中更新監(jiān)測(cè)數(shù)據(jù),測(cè)試不使用緩存的掃描查詢、H-CQ緩存查詢和H-CRQ緩存查詢?cè)诓煌彺婵臻g大小情況下,查詢相同關(guān)鍵詞的查詢性能,結(jié)果見(jiàn)圖8。 圖8 不同緩存大小時(shí)的查詢性能對(duì)比 如圖8所示,緩存空間過(guò)大時(shí)會(huì)對(duì)H-CQ緩存查詢和H-CRQ緩存查詢的性能造成影響。在鐵路供電監(jiān)測(cè)集群分布模式下,緩存中每個(gè)關(guān)鍵詞出現(xiàn)位置平均為17個(gè)字節(jié),每條緩存記錄可返回查詢結(jié)果集記錄平均為10 000條,約占166 kB。若緩存記錄條數(shù)設(shè)置為15 000條,緩存空間約占用2.37 GB,占集群總內(nèi)存的12%,接近最近最小使用原則設(shè)置的當(dāng)前可用內(nèi)存1/8,因此當(dāng)緩存空間設(shè)置小于15 000條時(shí),不會(huì)對(duì)集群運(yùn)行產(chǎn)生影響,H-CQ緩存查詢和H-CRQ緩存查詢性能均優(yōu)于原生查詢。而當(dāng)緩存記錄條數(shù)為18 000條時(shí),緩存空間約占2.85 GB,占集群總內(nèi)存的14%,超過(guò)了當(dāng)前可用內(nèi)存的1/8,對(duì)集群性能產(chǎn)生影響,查詢處理的實(shí)時(shí)性降低,緩存查詢耗時(shí)明顯增加。 根據(jù)式(5)可得,緩存空間記錄條數(shù)L與緩存查詢的命中率P′呈正相關(guān)關(guān)系,而命中率P′越高,鐵路供電監(jiān)測(cè)數(shù)據(jù)集群進(jìn)行非主行鍵查詢時(shí)進(jìn)行緩存查詢的概率越大。則可得L設(shè)置越大,鐵路供電監(jiān)測(cè)數(shù)據(jù)集群進(jìn)行緩存查詢的概率越大。但緩存空間設(shè)置過(guò)大會(huì)影響集群工作性能,將給緩存查詢處理帶來(lái)一定的延時(shí)。 綜上表明,并不能一味靠增加緩存空間大小達(dá)到增加鐵路供電監(jiān)測(cè)數(shù)據(jù)集群進(jìn)行緩存查詢的概率,提高查詢效率的目的。在集群中根據(jù)可用內(nèi)存合理設(shè)置緩存空間記錄條數(shù),可增加緩存查詢命中率P′且不會(huì)對(duì)鐵路供電監(jiān)測(cè)數(shù)據(jù)集群運(yùn)行產(chǎn)生影響,能有效提升鐵路供電監(jiān)測(cè)數(shù)據(jù)集群查詢效率。 在四機(jī)集群中分別導(dǎo)入5.0×108、1.0×109和1.6×109條鐵路10 kV供電監(jiān)測(cè)數(shù)據(jù)記錄,并設(shè)置緩存空間為15 000條,使用掃描查詢和H-CRQ緩存查詢對(duì)億級(jí)鐵路供電監(jiān)測(cè)數(shù)據(jù)進(jìn)行關(guān)鍵詞查詢,測(cè)試H-CRQ方法對(duì)海量重復(fù)數(shù)據(jù)查詢優(yōu)化效果。然后分別使用H-CQ緩存查詢、H-CRQ緩存查詢進(jìn)行查詢測(cè)試,對(duì)比多線程讀寫的情況下2種緩存算法的查詢性能。 (1)關(guān)鍵詞二級(jí)索引查詢測(cè)試 在鐵路供電監(jiān)測(cè)數(shù)據(jù)集群正常運(yùn)行情況下,以1.6×109條算例監(jiān)測(cè)數(shù)據(jù)記錄為輸入,對(duì)關(guān)鍵詞進(jìn)行查詢,關(guān)鍵詞二級(jí)索引查詢結(jié)構(gòu)見(jiàn)圖9。 圖9 關(guān)鍵詞查詢結(jié)構(gòu) (2)H-CRQ緩存查詢與掃描查詢性能對(duì)比 在鐵路供電監(jiān)測(cè)數(shù)據(jù)集群正常運(yùn)行情況下,分別以5.0×108、1.0×109和1.6×109條算例監(jiān)測(cè)數(shù)據(jù)記錄為輸入,使用掃描查詢與H-CRQ緩存查詢對(duì)不同重復(fù)度的關(guān)鍵詞數(shù)據(jù)進(jìn)行查詢性能測(cè)試,測(cè)試結(jié)果見(jiàn)圖10。 圖10 不同重復(fù)度的非主行鍵查詢性能對(duì)比 由圖10可得,非主行鍵二級(jí)索引查詢返回結(jié)果集大小對(duì)原生非主行鍵查詢性能有很大影響。如導(dǎo)入1.6×109條監(jiān)測(cè)數(shù)據(jù)記錄,當(dāng)查詢結(jié)果集記錄條數(shù)為1 355條時(shí),掃描查詢與H-CRQ緩存查詢性能無(wú)明顯差距,耗時(shí)均為160 ms左右。但當(dāng)查詢結(jié)果集記錄條數(shù)達(dá)萬(wàn)級(jí)以上時(shí),掃描查詢耗時(shí)明顯增加,如查詢結(jié)果集為209 745條記錄時(shí),掃描查詢耗時(shí)312 ms,而H-CRQ緩存查詢耗時(shí)182 ms。綜上表明,H-CRQ緩存查詢可以改善鐵路供電監(jiān)測(cè)數(shù)據(jù)非主行鍵查詢集群中海量數(shù)據(jù)非主行鍵的查詢性能,對(duì)重復(fù)度達(dá)20萬(wàn)條記錄以上的數(shù)據(jù)記錄,查詢性能提高了42%。 (3)多線程讀寫情況下查詢性能對(duì)比 在鐵路供電監(jiān)測(cè)數(shù)據(jù)集群正常運(yùn)行情況下,分別以5.0×108、1.0×109和1.6×109條算例監(jiān)測(cè)數(shù)據(jù)記錄為輸入,并持續(xù)向集群數(shù)據(jù)庫(kù)中更新監(jiān)測(cè)數(shù)據(jù),同時(shí)使用H-CQ緩存查詢和H-CRQ緩存查詢對(duì)不同重復(fù)度的關(guān)鍵詞數(shù)據(jù)進(jìn)行查詢性能測(cè)試,測(cè)試結(jié)果見(jiàn)圖11。 圖11 多線程讀寫下H-CQ與H-CRQ查詢性能對(duì)比 由圖11可知,多線程讀寫情況下,鐵路供電監(jiān)測(cè)數(shù)據(jù)寫入對(duì)H-CQ緩存查詢性能有一定影響,H-CQ緩存查詢讀取數(shù)據(jù)時(shí),H-CQ方法對(duì)數(shù)據(jù)庫(kù)更新操作加互斥鎖,需等待寫入進(jìn)程結(jié)束后開(kāi)始查詢讀取數(shù)據(jù)。等待寫入操作時(shí)間不同,鐵路供電監(jiān)測(cè)數(shù)據(jù)寫入對(duì)H-CQ緩存查詢性能有不同程度的影響,而H-CRQ緩存查詢的性能并未被數(shù)據(jù)寫入操作影響,查詢時(shí)間均少于H-CQ緩存查詢。在寫入進(jìn)程影響下,導(dǎo)入1.6×109條監(jiān)測(cè)數(shù)據(jù)記錄,H-CQ緩存查詢結(jié)果為209 745條的查詢操作比H-CRQ緩存查詢耗時(shí)多31 ms。表明H-CRQ緩存查詢?cè)诙嗑€程讀寫情況下查詢性能優(yōu)于H-CQ緩存查詢,對(duì)重復(fù)度達(dá)20萬(wàn)條記錄以上的數(shù)據(jù)記錄,查詢性能比H-CQ查詢高15%。 (1)利用倒排二級(jí)索引和動(dòng)態(tài)緩存機(jī)制,提出一種鐵道供電綜合監(jiān)控海量數(shù)據(jù)的H-CRQ集群處理方法。將監(jiān)控?cái)?shù)據(jù)結(jié)構(gòu)改變?yōu)榈古潘饕Y(jié)構(gòu),查詢直接根據(jù)特定關(guān)鍵詞檢索,并將倒排索引查詢結(jié)果儲(chǔ)存在緩存中,設(shè)計(jì)H-CRQ方法對(duì)緩存進(jìn)行更新替換。通過(guò)四機(jī)鐵路供電監(jiān)測(cè)數(shù)據(jù)集群的非主行鍵查詢測(cè)試比較,驗(yàn)證了H-CRQ緩存查詢可有效提高鐵路供電監(jiān)測(cè)集群海量重復(fù)數(shù)據(jù)查詢效率。 (2)以鐵道供電實(shí)測(cè)監(jiān)控信息數(shù)據(jù)為算例,進(jìn)行多組非主行鍵查詢響應(yīng)測(cè)試。結(jié)果表明,緩存空間大小設(shè)置不超過(guò)當(dāng)前可用內(nèi)存的1/8時(shí),H-CRQ查詢可有效提高鐵路供電監(jiān)測(cè)集群海量重復(fù)數(shù)據(jù)查詢效率,對(duì)重復(fù)度達(dá)20萬(wàn)條記錄以上的數(shù)據(jù)記錄,查詢性能比全掃描查詢高42%,且在鐵路供電監(jiān)測(cè)數(shù)據(jù)不斷寫入情況下,查詢性能比H-CQ查詢高15%。3.3 H-CRQ方法的命中率
4 實(shí)驗(yàn)與結(jié)果分析
4.1 搭建測(cè)試集群
4.2 緩存空間對(duì)查詢性能影響測(cè)試
4.3 查詢性能對(duì)比測(cè)試
5 結(jié)論