国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于ES-Redis的航班延誤可視化系統(tǒng)

2021-02-14 03:14:14屈景怡陳旭陽張雄威
中國民航大學(xué)學(xué)報 2021年6期
關(guān)鍵詞:數(shù)據(jù)檢索搜索引擎航班

屈景怡,陳旭陽,鞠 澎,劉 芳,張雄威

(1.中國民航大學(xué)天津市智能信號與圖像處理重點(diǎn)實驗室,天津 300300;2.中國民用航空華北地區(qū)空中交通管理局天津空管分局,北京 100621)

2019年民航業(yè)發(fā)展統(tǒng)計公報指出,本年度全行業(yè)完成旅客周轉(zhuǎn)量11 705.30 億人公里,比上年增長9.3%。國內(nèi)航線完成旅客周轉(zhuǎn)量8 520.22 億人公里,比上年增長8.0%,國際航線完成旅客周轉(zhuǎn)量3 185.08億人公里,比上年增長12.8%。逐年增長的航班旅客運(yùn)輸量反映了民航業(yè)的蓬勃發(fā)展,同時航班數(shù)量的不斷增長產(chǎn)生了海量的航班數(shù)據(jù),這些數(shù)據(jù)的存儲,處理要求時效性、準(zhǔn)確性與可靠性,如何管理并利用好海量的航班數(shù)據(jù)已成為亟待解決的問題。通過利用航班數(shù)據(jù)輔以大數(shù)據(jù)技術(shù),開發(fā)了一套面向空管部門的航班延誤可視化系統(tǒng)。

空中交通管制(簡稱空管)部門存儲結(jié)構(gòu)化數(shù)據(jù)多采用Oracle、SQL Server 等關(guān)系型數(shù)據(jù)庫,此類數(shù)據(jù)庫技術(shù)最為成熟,擁有良好的事務(wù)性,能夠很好地支持結(jié)構(gòu)化數(shù)據(jù)存儲,因此,使用具有代表性的關(guān)系型數(shù)據(jù)庫MySQL 進(jìn)行數(shù)據(jù)存儲。由于航班數(shù)據(jù)量較大且具有擴(kuò)展性,MySQL 數(shù)據(jù)庫的數(shù)據(jù)讀取速度隨數(shù)據(jù)量擴(kuò)增越來越慢,無法保障系統(tǒng)的實時性,因此,考慮使用大數(shù)據(jù)的相關(guān)技術(shù)減輕系統(tǒng)的運(yùn)行壓力。

Redis 數(shù)據(jù)庫作為高效的非關(guān)系型數(shù)據(jù)庫,是基于內(nèi)存實現(xiàn)的,在數(shù)據(jù)處理性能方面,Redis 要優(yōu)于絕大多數(shù)數(shù)據(jù)庫,具有提升Web 系統(tǒng)的響應(yīng)速度和人機(jī)交互體驗的能力。文獻(xiàn)[1-3]分別將Redis 用于高性能智能快遞柜管理系統(tǒng)、農(nóng)田物聯(lián)網(wǎng)云存儲系統(tǒng)與面向小文件的分布式存儲系統(tǒng),這些都驗證了Redis 作為Web 系統(tǒng)數(shù)據(jù)緩存的有效性與可靠性。文獻(xiàn)[4]使用Redis 集群方式對身份數(shù)據(jù)進(jìn)行存儲,減輕系統(tǒng)運(yùn)行壓力,但該方法只能存儲結(jié)構(gòu)簡單的數(shù)據(jù),對于結(jié)構(gòu)復(fù)雜的大規(guī)模數(shù)據(jù)集并不適用。為此,近年來國內(nèi)學(xué)者對高性能、支持結(jié)構(gòu)復(fù)雜數(shù)據(jù)存儲的數(shù)據(jù)庫進(jìn)行研究:文獻(xiàn)[5]提出使用HBase 數(shù)據(jù)庫存儲結(jié)構(gòu)復(fù)雜的航空大數(shù)據(jù),并依托SolrCloud 搜索引擎實現(xiàn)了基于Web界面的航班實時追蹤;文獻(xiàn)[6]以MongoDB 集群為基礎(chǔ),以ES(elasticsearch)分布式搜索引擎對數(shù)據(jù)庫系統(tǒng)進(jìn)行檢索加速,設(shè)計了一套分布式大數(shù)據(jù)存儲方案,滿足了實時性需求。但HBase、MongoDB 等數(shù)據(jù)庫數(shù)據(jù)類型單一、對數(shù)據(jù)庫事務(wù)支持有限,且與現(xiàn)有空管關(guān)系型數(shù)據(jù)存儲模式兼容性較差,需要將數(shù)據(jù)從空管部門數(shù)據(jù)庫導(dǎo)入其中。文獻(xiàn)[7]通過給MySQL 數(shù)據(jù)庫加裝ES 搜索引擎的方式提升系統(tǒng)性能,在兼顧關(guān)系型數(shù)據(jù)庫事務(wù)特性的同時,保證對原有MySQL 數(shù)據(jù)庫存儲模式的兼容性,文中還使用Redis 數(shù)據(jù)庫對熱點(diǎn)數(shù)據(jù)進(jìn)行備份,進(jìn)一步提升了系統(tǒng)性能,但并未使用Redis 緩存替換策略優(yōu)化系統(tǒng),未考慮到由于Redis 數(shù)據(jù)庫完全基于內(nèi)存實現(xiàn)而過多占用內(nèi)存增加系統(tǒng)運(yùn)行負(fù)擔(dān),不設(shè)置緩存上限與清理策略會導(dǎo)致緩存失效等問題。

綜上,設(shè)計的航班延誤可視化系統(tǒng)整合了MySQL數(shù)據(jù)庫的事務(wù)性、優(yōu)越的數(shù)據(jù)統(tǒng)計能力和ES 分布式搜索引擎與Redis 數(shù)據(jù)庫的高效檢索能力,提出了一種ES-Redis 數(shù)據(jù)處理模式,并在此基礎(chǔ)上實現(xiàn)了一種基于ES-Redis 的緩存替換算法Hybrid,進(jìn)一步提升了系統(tǒng)的可用性與實時性。此外,在前人研究基礎(chǔ)上,對現(xiàn)有的航班延誤預(yù)測算法進(jìn)行封裝,并使用Socket 技術(shù)實現(xiàn)航班延誤預(yù)測功能的開發(fā)。

1 需求分析

航班延誤可視化系統(tǒng)面向空管部門開發(fā),安裝在中國民用航空華北地區(qū)空中交通管理局(簡稱空管局)空管中心塔臺、流量管理室及運(yùn)管中心,如圖1所示,該系統(tǒng)包括5 個部分:

圖1 航班延誤可視化系統(tǒng)設(shè)計Fig.1 Design of flight delay visualization system

1)航班數(shù)據(jù)接入

系統(tǒng)數(shù)據(jù)的導(dǎo)入采用離線方式,由系統(tǒng)前端提供數(shù)據(jù)導(dǎo)入接口;

2)航班延誤查詢

為用戶提供秒級響應(yīng)的數(shù)據(jù)快速檢索功能;

3)航班延誤統(tǒng)計

為用戶按日、月、年統(tǒng)計各機(jī)場的航班延誤信息;

4)航班延誤預(yù)測

利用歷史航班數(shù)據(jù)對深度學(xué)習(xí)算法進(jìn)行訓(xùn)練的基礎(chǔ)上,使用Socket 套接字技術(shù)實現(xiàn)航班延誤預(yù)測;

5)數(shù)據(jù)管理

數(shù)據(jù)管理模塊負(fù)責(zé)接收空管局傳遞的航班數(shù)據(jù),對其進(jìn)行解析及校核后存儲在數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)管理模塊可以對系統(tǒng)數(shù)據(jù)提供管理功能:錄入、更新、刪除。

該系統(tǒng)是面向大數(shù)據(jù)開發(fā)的航班延誤可視化系統(tǒng),要求頁面響應(yīng)時間在1 s 以內(nèi)。

2 總體設(shè)計

2.1 系統(tǒng)框架設(shè)計

系統(tǒng)采用B/S 架構(gòu)實現(xiàn),使用SpringBoot[8]整合的方式實現(xiàn)前、后端共同開發(fā),極大簡化了系統(tǒng)開發(fā)流程。系統(tǒng)前端使用超文本標(biāo)記語言(HTML)、層疊樣式表(CSS)、JavaScript 語言封裝庫(JQuery)整合可視化組件Echarts 進(jìn)行開發(fā)。系統(tǒng)后端使用SSM(Spring+SpringMVC+MyBatis)框架開發(fā),采用MVC(model view controller)設(shè)計模式實現(xiàn),利用SpringMVC 的高內(nèi)聚、低耦合特性實現(xiàn)業(yè)務(wù)模型與頁面的分離,提高了代碼的復(fù)用性。系統(tǒng)使用MySQL 作為數(shù)據(jù)庫、Redis 作為緩存數(shù)據(jù)庫、ES 作為MySQL 數(shù)據(jù)庫的搜索引擎。整體架構(gòu)如圖2所示。

圖2 航班延誤可視化系統(tǒng)整體架構(gòu)Fig.2 Overall structure of flight delay visualization system

2.2 數(shù)據(jù)庫設(shè)計

數(shù)據(jù)庫是航班延誤可視化系統(tǒng)的基礎(chǔ),航班數(shù)據(jù)采用關(guān)系型數(shù)據(jù)庫MySQL 進(jìn)行存儲。存儲在其中的數(shù)據(jù)主要分為3 個部分5 張表,如圖3所示,即原始航班數(shù)據(jù)部分1 張表、航班延誤統(tǒng)計部分3 張表(包括以日、月、年為單位的統(tǒng)計表)及用戶數(shù)據(jù)部分1 張表。

圖3 數(shù)據(jù)存儲結(jié)構(gòu)Fig.3 Structure of data storage

原始航班數(shù)據(jù)包括:航班號、飛機(jī)尾號、起飛機(jī)場、到達(dá)機(jī)場、飛行日期、起飛/降落延誤時間、數(shù)據(jù)更新時間等14 列內(nèi)容。日、月、年航班延誤統(tǒng)計表分別存儲以小時、日、月為統(tǒng)計單位的航班延誤統(tǒng)計結(jié)果。以日航班延誤統(tǒng)計為例,統(tǒng)計數(shù)據(jù)包括:飛行日期、機(jī)場名、時段信息(0~23 點(diǎn))、起飛/降落航班數(shù)量、延誤架次、延誤率、平均延誤時長、無延誤航班數(shù)量(延誤時長≤15 min)、輕度延誤航班數(shù)量(延誤時長16~30 min)、中度延誤航班數(shù)量(延誤時長31~60 min)、高度延誤航班數(shù)量(延誤時長61~120 min)、重度延誤航班數(shù)量(延誤時長>120 min)等。用戶數(shù)據(jù)表包括:用戶名、密碼、權(quán)限、注冊時間。上述各表均使用InnoDB 的儲存引擎進(jìn)行存儲,添加Int 類型、自增、主鍵類型的Id 列。為了節(jié)省存儲空間,除主鍵列的其他數(shù)據(jù)列都使用可變長度的字符串類型定義。

MySQL 數(shù)據(jù)庫中存儲數(shù)據(jù)的主要查詢需求來自航班延誤統(tǒng)計模塊,該模塊統(tǒng)計數(shù)據(jù)需要進(jìn)行大量的SQL 查詢。面對大數(shù)據(jù)量的檢索需求,提高M(jìn)ySQL 數(shù)據(jù)庫響應(yīng)速度的主要策略是在數(shù)據(jù)庫中建立索引。

本系統(tǒng)使用聯(lián)合索引(多列索引)的方式對起飛機(jī)場、航班執(zhí)行日期、航班實際起飛時間、航班起飛延誤時間、降落機(jī)場、航班實際降落日期、航班實際降落時間、航班降落延誤時間8 個檢索條件建立索引。在數(shù)據(jù)庫中建立起飛與降落統(tǒng)計兩個聯(lián)合索引,具體如表1所示。

表1 Flight 表索引設(shè)計Tab.1 Index design of the Flight table

3 系統(tǒng)實現(xiàn)的關(guān)鍵技術(shù)

3.1 基于Socket 的航班延誤預(yù)測

通過對深度學(xué)習(xí)算法進(jìn)行封裝,使用套接字對已經(jīng)訓(xùn)練好的航班延誤預(yù)測模型進(jìn)行調(diào)用,設(shè)置系統(tǒng)后端為客戶端,算法端為服務(wù)器端。系統(tǒng)后端通過Spring配置注解的方式在系統(tǒng)啟動與結(jié)束時控制算法端的啟動與關(guān)閉。系統(tǒng)啟動后,算法端監(jiān)聽由可視化系統(tǒng)后端發(fā)送過來的請求,系統(tǒng)前端獲取用戶上傳的航班排班信息,航班數(shù)據(jù)經(jīng)過系統(tǒng)后端的數(shù)據(jù)解析后上傳到算法服務(wù)器,然后將航班數(shù)據(jù)發(fā)送給航班延誤預(yù)測模塊進(jìn)行數(shù)據(jù)的編碼、預(yù)測,最終預(yù)測出各航班的延誤等級,結(jié)果由Socket 返回系統(tǒng)后端,并將預(yù)測結(jié)果返回給系統(tǒng)前端界面,最終存儲在數(shù)據(jù)庫中。航班延誤預(yù)測界面如圖4所示。

圖4 航班延誤預(yù)測界面Fig.4 Interface of flight delay prediction

3.2 基于Echarts 的航班延誤可視化

航班延誤統(tǒng)計模塊通過配置啟動加載項的方式,在首次啟動時統(tǒng)計組件按日、月、年為單位統(tǒng)計數(shù)據(jù)庫內(nèi)的航班數(shù)據(jù)。

以日統(tǒng)計為例:統(tǒng)計模塊以小時為單位進(jìn)行航班日延誤統(tǒng)計,包括起飛/降落航班數(shù)量、延誤架次、延誤率、平均延誤時長及5 類延誤等級的航班數(shù)量,統(tǒng)計結(jié)果直接寫入MySQL 數(shù)據(jù)庫的日航班延誤統(tǒng)計表中。

系統(tǒng)啟動后,由系統(tǒng)后端監(jiān)聽實時數(shù)據(jù)流,當(dāng)航班數(shù)據(jù)進(jìn)行更新時,調(diào)用航班延誤統(tǒng)計模塊對更新數(shù)據(jù)進(jìn)行統(tǒng)計。為了保證MySQL 數(shù)據(jù)庫性能,系統(tǒng)將統(tǒng)計結(jié)果先更新入Redis 數(shù)據(jù)庫進(jìn)行緩存,每隔一段時間對MySQL 數(shù)據(jù)庫中的航班延誤統(tǒng)計數(shù)據(jù)表進(jìn)行更新。

界面的前、后端數(shù)據(jù)交互采用AJAX(Asynchronous JavaScript and XML)異步請求后端完成,流程如圖5所示。系統(tǒng)后端對航班延誤數(shù)據(jù)統(tǒng)計完成后,將統(tǒng)計結(jié)果存入MySQL 數(shù)據(jù)庫中,當(dāng)系統(tǒng)前端訪問航班延誤統(tǒng)計頁面時,由前端先準(zhǔn)備好DOM 容器,并選擇合適的Echarts[9-10]統(tǒng)計實例,接著初始化實例,然后通過AJAX從MySQL 數(shù)據(jù)庫讀取并解析好統(tǒng)計數(shù)據(jù),最后配置可視化組件參數(shù),生成統(tǒng)計圖表。航班延誤數(shù)據(jù)統(tǒng)計界面如圖6所示。

圖5 航班延誤數(shù)據(jù)統(tǒng)計流程Fig.5 Statistical analysis process of flight delay data

圖6 航班延誤數(shù)據(jù)統(tǒng)計界面Fig.6 Interface of statistical analysis of flight delay data

3.3 基于Redis 的緩存實現(xiàn)

為進(jìn)一步提高系統(tǒng)的運(yùn)行速度,減少系統(tǒng)延時,需要將系統(tǒng)中常用數(shù)據(jù)存入緩存。系統(tǒng)接受查詢請求后會優(yōu)先檢測緩存內(nèi)有無所需數(shù)據(jù),如果無緩存記錄,再去查詢數(shù)據(jù)庫,這樣降低了MySQL 數(shù)據(jù)庫的訪問頻率,提升系統(tǒng)的訪問效率,降低數(shù)據(jù)庫的壓力,提高系統(tǒng)性能。

MyBatis 原生緩存分為一級緩存與二級緩存2 種:一級緩存是會話級別的緩存,MyBatis 默認(rèn)開啟一級緩存,在同一次會話內(nèi),相同查詢條件會觸發(fā)一級緩存并從緩存獲取數(shù)據(jù);二級緩存是映射文件級別的緩存,同一映射文件的不同會話共用二級緩存,二級緩存開啟后緩存觸發(fā)的順序變?yōu)橄炔樵兌壘彺嬖俨樵円患壘彺妫瑪?shù)據(jù)庫的插入與更新操作會自動觸發(fā)緩存清理。二級緩存是面向映射文件開發(fā)的,不同的映射文件處理同一張數(shù)據(jù)庫表會發(fā)生數(shù)據(jù)臟讀。

Redis 是將所有的緩存數(shù)據(jù)存儲在內(nèi)存中,內(nèi)存數(shù)據(jù)由定時清除算法或緩存替換算法管理,避免了臟讀問題。

系統(tǒng)選用基于內(nèi)存實現(xiàn)的高性能非關(guān)系型緩存庫Redis 作為二級緩存,支持字符、鏈表、集合、有序集與哈希類型多種數(shù)據(jù)結(jié)構(gòu)。相比MyBatis 的二級緩存,Redis 還支持?jǐn)?shù)據(jù)的持久化操作,可以將存儲在內(nèi)存中的數(shù)據(jù)保存到硬盤上。為了保證數(shù)據(jù)一致性,當(dāng)MySQL數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行更新、插入、刪除操作后,需要及時清除Redis 緩存內(nèi)容。

Redis 數(shù)據(jù)庫還支持集群化,本系統(tǒng)采用主、從復(fù)制的集群化方案,主節(jié)點(diǎn)通過主、從備份將數(shù)據(jù)同步到從節(jié)點(diǎn)。該方案實現(xiàn)了Redis 的讀、寫分離,主節(jié)點(diǎn)只關(guān)注寫入數(shù)據(jù)操作,從節(jié)點(diǎn)提供數(shù)據(jù)的讀取功能,實現(xiàn)了Redis 的負(fù)載均衡。當(dāng)一個節(jié)點(diǎn)出現(xiàn)宕機(jī)時,其他節(jié)點(diǎn)不會受到影響,大大提升了系統(tǒng)的穩(wěn)定性與并發(fā)性。

3.4 基于ES 的搜索引擎部署

系統(tǒng)使用Redis 數(shù)據(jù)庫作為緩存數(shù)據(jù)庫,未命中的緩存查詢?nèi)詴腗ySQL 數(shù)據(jù)庫中獲取數(shù)據(jù)。MySQL數(shù)據(jù)庫現(xiàn)存數(shù)據(jù)體量大且逐年增加,航班數(shù)據(jù)檢索開銷較大,使用ES 搜索引擎接管MySQL 數(shù)據(jù)可以極大縮短未命中緩存條件下的數(shù)據(jù)檢索時間。

3.4.1 ES 搜索引擎

ES 搜索引擎是基于Lucence[11]倒排索引實現(xiàn)的。當(dāng)數(shù)據(jù)導(dǎo)入ES 中,ES 會對存儲內(nèi)容進(jìn)行分詞,并為每個分詞的字段建立存儲位置、文檔號碼等信息的倒排索引。ES 的倒排索引是基于內(nèi)存實現(xiàn)的,查詢數(shù)據(jù)時先根據(jù)分詞獲取數(shù)據(jù)存儲位置,再進(jìn)行磁盤的搜索,這樣的檢索模式與MySQL 數(shù)據(jù)庫的B+Tree 索引相比大大降低了檢索數(shù)據(jù)時磁盤I/O 開銷。為了節(jié)約倒排索引在內(nèi)存中的存儲空間,提升檢索性能,ES 系統(tǒng)還會對倒排索引表進(jìn)行壓縮[12]。

3.4.2 數(shù)據(jù)導(dǎo)入

系統(tǒng)使用SpringBoot 對數(shù)據(jù)存儲各模塊進(jìn)行整合,MySQL 數(shù)據(jù)庫中的航班數(shù)據(jù)通過Logstash 插件導(dǎo)入ES 中。在使用Logstash 插件導(dǎo)入數(shù)據(jù)的基礎(chǔ)上開發(fā)增量數(shù)據(jù)同步功能。Logstash 插件隨系統(tǒng)同時開啟,監(jiān)聽MySQL 數(shù)據(jù)庫中原始航班數(shù)據(jù)表中的Id 列與數(shù)據(jù)更新時間列,原始航班數(shù)據(jù)表中發(fā)生更新、插入、刪除操作時會相應(yīng)地更新MySQL 數(shù)據(jù)庫,并觸發(fā)Logstash插件進(jìn)行數(shù)據(jù)同步,增量同步數(shù)據(jù)流圖如圖7所示。

圖7 增量同步數(shù)據(jù)流Fig.7 Data flow of incremental synchronous data

3.5 基于ES-Redis 的多條件關(guān)聯(lián)查詢算法

在系統(tǒng)部署上述緩存系統(tǒng)與搜索引擎基礎(chǔ)上,利用ES 搜索引擎與Redis 數(shù)據(jù)庫緩存對航班數(shù)據(jù)進(jìn)行多條件關(guān)聯(lián)查詢,將多條件查詢的請求參數(shù)標(biāo)記為Q(QO,QF,QT,QD),其中:QO 表示起飛機(jī)場;QF 表示航班號;QT 表示航班執(zhí)行日期;QD 表示降落機(jī)場。根據(jù)查詢面板獲取的查詢參數(shù),使用過濾器對數(shù)據(jù)進(jìn)行條件搜索。針對過濾器查詢策略提出一種查詢算法,系統(tǒng)查詢流程如圖8所示,算法描述如下。

圖8 系統(tǒng)查詢流程Fig.8 Process of system query

輸入查詢條件Q(QO,QF,QT,QD)

輸出航班數(shù)據(jù)結(jié)果集合

算法過程:

(1)先判斷查詢條件是否為空,將空的查詢條件剔除,將剩余非空查詢條件進(jìn)行整合,整合結(jié)果(QO+QF+QT+QD)作為關(guān)鍵字對Redis 數(shù)據(jù)庫中緩存內(nèi)容進(jìn)行搜索;

(2)若查詢緩存的結(jié)果為空,則轉(zhuǎn)向步驟(3);若查詢緩存結(jié)果非空,則返回查詢結(jié)果集,算法結(jié)束;

(3)將多個查詢條件分別構(gòu)建過濾器,并將過濾器封裝入布爾查詢中;

(4)使用布爾查詢檢索搜索引擎ES;

(5)按照查詢條件作為關(guān)鍵字,將查詢結(jié)果存入緩存,并返回查詢結(jié)果集,算法結(jié)束。

4 基于ES-Redis 的緩存替換

系統(tǒng)使用的ES-Redis 檢索模式尚有缺陷,由于Redis 數(shù)據(jù)庫是完全基于內(nèi)存運(yùn)行的,過多的緩存數(shù)據(jù)會導(dǎo)致內(nèi)存溢出,進(jìn)而導(dǎo)致系統(tǒng)緩存失效,因此,設(shè)置緩存容量上限尤為關(guān)鍵。當(dāng)系統(tǒng)到達(dá)緩存上限時,Redis 會根據(jù)緩存替換策略對緩存內(nèi)的數(shù)據(jù)進(jìn)行替換、刪除操作。

4.1 Hybrid 算法介紹

Redis 數(shù)據(jù)庫原始的緩存替換策略[13]有最近最久未使用(LRU,least recently used)算法、最近最少使用(LFU,least frequently used)算法及隨機(jī)替換(random)算法。上述算法實現(xiàn)簡單、容易調(diào)用,只需在Redis 數(shù)據(jù)庫的配置文件中直接配置即可,但都沒有考慮對象的大小與獲取復(fù)雜程度等信息。相比而言,Hybrid算法的替換標(biāo)準(zhǔn)是根據(jù)緩存對象的使用頻率、大小、獲取復(fù)雜程度等信息計算緩存對象價值,數(shù)據(jù)的保留意義更大,可提升系統(tǒng)運(yùn)行效率。Hybrid 算法緩存價值計算如下

式中:Fi為緩存對象Ri的緩存價值,價值越小被替換的概率越大;Cs為客戶端與服務(wù)器連接的時間,這里表示從ES 中獲取數(shù)據(jù)的損耗時間;C1與C2為固定常數(shù);bs為服務(wù)器帶寬;Si為緩存對象Ri的大??;fi表示緩存對象Ri的訪問次數(shù)。

在Hybrid 算法基礎(chǔ)上,引入緩存對象Ri的最后訪問時間Ti來清理長時間未被使用的緩存對象,但由于Ti因子數(shù)值相差較大,對緩存價值影響過大,因此,引入lnTi因子,降低算法對Ti的依賴性。應(yīng)用緩存替換算法的對象主要是常用的檢索數(shù)據(jù),緩存對象的大小相對固定,故此將式(1)改進(jìn)為

4.2 Hybrid 緩存價值集設(shè)計

算法設(shè)計面向的數(shù)據(jù)對象是用戶數(shù)據(jù)與熱點(diǎn)數(shù)據(jù),存儲信息大小相對固定,因此,引用緩存價值集來存儲緩存對象,分別將數(shù)據(jù)檢索信息與用戶信息存儲在緩存價值集Or與Ou中。為Redis 數(shù)據(jù)庫設(shè)置緩存容量也可轉(zhuǎn)變?yōu)樵O(shè)置緩存價值集的存儲數(shù)據(jù)容量上限。

以存儲熱點(diǎn)數(shù)據(jù)檢索信息為例,緩存對象與緩存價值集的設(shè)置如下。

緩存對象Ri包括的信息如下:①緩存對象的Key;②從ES 獲取數(shù)據(jù)所耗時間Cs;③緩存對象Ri的訪問次數(shù)fi;④緩存對象Ri的最后訪問時間Ti;⑤緩存對象Ri的緩存價值Fi;⑥緩存對象Ri的緩存內(nèi)容。

緩存價值集包含所有緩存對象,是以緩存對象Ri的Key 按照緩存價值從小到大的集合,其表示為Or={R1,R2,…,Ri},其對應(yīng)的緩存價值F1

4.3 Hybrid 算法執(zhí)行流程

算法執(zhí)行流程如圖9所示,具體流程如下:

圖9 Hybrid 算法執(zhí)行流程Fig.9 Execution process of Hybrid algorithm

(1)由于Redis 數(shù)據(jù)庫存在首次查詢時緩存未進(jìn)行熱備份導(dǎo)致檢索緩慢的問題,因此,系統(tǒng)啟動后,在系統(tǒng)后端構(gòu)建隨機(jī)條件進(jìn)行首次檢索;

(2)當(dāng)用戶查詢數(shù)據(jù)時,先判斷Redis 數(shù)據(jù)庫中是否有緩存數(shù)據(jù),若緩存中有數(shù)據(jù)則更新緩存價值與緩存價值集,并返回查詢數(shù)據(jù),轉(zhuǎn)步驟(4),否則轉(zhuǎn)向步驟(3);

(3)從ES 中進(jìn)行數(shù)據(jù)檢索,若未查詢到,返回查詢失敗信息,轉(zhuǎn)步驟(4);否則系統(tǒng)檢索數(shù)據(jù)后,判斷緩存價值集是否有緩存空間,如果有則存入其中,如沒有清理緩存空間,從緩存價值集中剔除價值小的對象并將本次所查數(shù)據(jù)存入Redis 數(shù)據(jù)庫中,最后更新緩存價值與緩存價值集并返回查詢數(shù)據(jù),轉(zhuǎn)步驟(4)。

(4)算法結(jié)束。

5 實驗結(jié)果

5.1 數(shù)據(jù)檢索性能對比

設(shè)置MySQL、MySQL-Redis、ES、ES-Redis 4 組實驗對象,在相同的運(yùn)行環(huán)境下設(shè)置500~2 000 次的隨機(jī)數(shù)據(jù)查詢,設(shè)置Redis 數(shù)據(jù)庫的緩存容量為700。根據(jù)系統(tǒng)的響應(yīng)速度來對比MySQL、MySQL-Redis、ES、ES-Reids 4 種數(shù)據(jù)檢索模式下的系統(tǒng)性能,實驗結(jié)果如圖10所示。

圖10 各數(shù)據(jù)檢索模式下檢索響應(yīng)時間Fig.10 Response time of data retrieval in each mode

從圖10中可看出:原始的MySQL 數(shù)據(jù)檢索模式性能最差,從加裝Redis 緩存到使用ES 分布式搜索引擎后,數(shù)據(jù)檢索效率又有一定提升,在使用文中的ESRedis 數(shù)據(jù)檢索模式后,檢索效率最高,相比于簡單的MySQL 數(shù)據(jù)檢索模式,ES-Redis 數(shù)據(jù)檢索模式效率最多高10 倍以上。

5.2 Hybrid 緩存替換算法性能分析

以檢索京津冀地區(qū)三大機(jī)場(北京首都國際機(jī)場、天津濱海國際機(jī)場、石家莊正定國際機(jī)場)一年內(nèi)每天的航班信息為例。設(shè)置緩存查詢命中失敗后從ES中進(jìn)行數(shù)據(jù)查詢,查詢數(shù)據(jù)的SQL 語句一共有365 ×3=1 095 種,隨機(jī)查詢語句對數(shù)據(jù)進(jìn)行2 000 次訪問,緩存初始容量為100。設(shè)置實驗組LRU(Redis 數(shù)據(jù)庫自帶緩存替換算法,按照最近最久使用進(jìn)行替換數(shù)據(jù))與Hybrid 兩組,分別使用LRU 與Hybrid 算法進(jìn)行5次查詢數(shù)據(jù)測試,記錄從數(shù)據(jù)庫獲取數(shù)據(jù)的平均響應(yīng)時間。實驗結(jié)果如圖11所示,可看出,由于Hybrid 算法考慮了對象獲取的復(fù)雜程度,會使系統(tǒng)查詢響應(yīng)速度進(jìn)一步提升。

圖11 緩存容量與平均響應(yīng)時間關(guān)系Fig.11 Relationship between cache capacity and average response time

6 結(jié)語

設(shè)計并實現(xiàn)了基于ES-Redis 的航班延誤可視化系統(tǒng),主要介紹了需求分析、總體設(shè)計、系統(tǒng)實現(xiàn)的關(guān)鍵技術(shù)與ES-Reids 緩存替換算法實現(xiàn)。首先,對深度學(xué)習(xí)算法進(jìn)行了模型封裝,并使用Socket 技術(shù)實現(xiàn)模型調(diào)用;然后,使用MySQL 統(tǒng)計語句對航班延誤數(shù)據(jù)進(jìn)行統(tǒng)計,并使用Echarts 可視化技術(shù)對統(tǒng)計結(jié)果進(jìn)行展示;再使用Redis 數(shù)據(jù)庫緩存技術(shù)與ES 搜索引擎提升系統(tǒng)檢索響應(yīng)速度,在此基礎(chǔ)上提出了一種基于ES-Redis 的數(shù)據(jù)多條件檢索算法,實現(xiàn)了航班數(shù)據(jù)檢索的快速響應(yīng),通過實驗對比了MySQL 與ES-Redis等4 種模式的數(shù)據(jù)檢索效率,證明了該算法的有效性;最后,著重介紹了基于ES-Redis 緩存替換的實現(xiàn),量化并分析了分別使用原始LRU 算法與Hybrid 算法對系統(tǒng)性能的影響,用實驗證明了Hybrid 算法的可行性。

猜你喜歡
數(shù)據(jù)檢索搜索引擎航班
全美航班短暫停飛
高速公路省級清分結(jié)算平臺高效數(shù)據(jù)檢索應(yīng)用探究
山航紅色定制航班
金橋(2021年10期)2021-11-05 07:23:10
山航紅色定制航班
金橋(2021年8期)2021-08-23 01:06:24
山航紅色定制航班
金橋(2021年7期)2021-07-22 01:55:10
本刊進(jìn)入的國內(nèi)外數(shù)據(jù)檢索/文獻(xiàn)服務(wù)機(jī)構(gòu)
本刊進(jìn)入的國內(nèi)外數(shù)據(jù)檢索/文獻(xiàn)服務(wù)機(jī)構(gòu)
網(wǎng)絡(luò)搜索引擎亟待規(guī)范
基于圖模型的通用半結(jié)構(gòu)化數(shù)據(jù)檢索
基于Nutch的醫(yī)療搜索引擎的研究與開發(fā)
多伦县| 隆回县| 延边| 灵川县| 郸城县| 诏安县| 怀仁县| 梓潼县| 安吉县| 茂名市| 察雅县| 斗六市| 太原市| 监利县| 临泽县| 大同县| 土默特右旗| 岗巴县| 昭觉县| 巴中市| 揭阳市| 桃江县| 遂宁市| 鄂州市| 鹿邑县| 抚远县| 延边| 陆丰市| 常州市| 海晏县| 安仁县| 健康| 南澳县| 苏尼特右旗| 清涧县| 太仆寺旗| 甘泉县| 丰城市| 利辛县| 万年县| 宁国市|