杜星熠,胡 靜,蔣 偉,宋鐵成
(東南大學(xué) 信息科學(xué)與工程學(xué)院,江蘇 南京 210096)
隨著物聯(lián)網(wǎng)(Internet of Things,IoT)的不斷發(fā)展,數(shù)據(jù)量劇增,對設(shè)備數(shù)據(jù)的監(jiān)控處理成為維護(hù)物聯(lián)網(wǎng)的重要部分。在海量數(shù)據(jù)中獲取、查詢到可供維護(hù)人員使用的有用信息,成為物聯(lián)網(wǎng)數(shù)據(jù)管理系統(tǒng)設(shè)計(jì)時(shí)需要解決的問題。因此,由數(shù)據(jù)驅(qū)動(dòng)的針對物聯(lián)網(wǎng)的復(fù)雜事件處理[1]成為研究的熱點(diǎn)。物聯(lián)網(wǎng)的日常管理充斥著大量規(guī)則,并且這種規(guī)則隨著業(yè)務(wù)和上層決策的變化而變化。規(guī)則引擎可以實(shí)現(xiàn)業(yè)務(wù)規(guī)則和應(yīng)用代碼的去耦合,可以通過調(diào)整業(yè)務(wù)規(guī)則而不改變應(yīng)用代碼的方式來改變物聯(lián)網(wǎng)的運(yùn)行機(jī)制,讓物聯(lián)網(wǎng)更加快速、平穩(wěn)地應(yīng)對需求的變化。
規(guī)則引擎起源于專家系統(tǒng)[2],其通過規(guī)則來進(jìn)行任務(wù)的決策。規(guī)則用于描述業(yè)務(wù)的邏輯或策略。目前,國內(nèi)外的規(guī)則引擎技術(shù)越來成熟,由于其具備靈活性和廣泛適用性,故在物聯(lián)網(wǎng)、電力、娛樂等領(lǐng)域都發(fā)揮著重要的作用。其中,使用最廣泛的是Drools規(guī)則引擎[3]。目前,國內(nèi)外物聯(lián)網(wǎng)場景中對規(guī)則引擎的使用主要是獲取實(shí)時(shí)數(shù)據(jù)進(jìn)行推理,并根據(jù)推理過程的結(jié)果進(jìn)行操作。在物聯(lián)網(wǎng)數(shù)據(jù)管理應(yīng)用中,目前的主流方法是使用Drools規(guī)則引擎的DRL文件和XLS決策表[4]文件來配置規(guī)則。這種方式可以實(shí)現(xiàn)規(guī)則與應(yīng)用代碼的完全分離,并且可以快速建立規(guī)則網(wǎng)絡(luò)。在查詢數(shù)據(jù)時(shí),每個(gè)數(shù)據(jù)均會(huì)進(jìn)入網(wǎng)絡(luò)進(jìn)行匹配。但在大數(shù)據(jù)量的環(huán)境下,重復(fù)機(jī)械的比對會(huì)產(chǎn)生冗余,會(huì)對性能產(chǎn)生較大影響。所以,針對不同的使用場景,選擇合適的架構(gòu)對提升查詢性能有著重要的作用。
為了解決物聯(lián)網(wǎng)數(shù)據(jù)查詢中重復(fù)比對產(chǎn)生冗余的問題,在DRL規(guī)則文件與決策表文件架構(gòu)的基礎(chǔ)上,設(shè)計(jì)了修正數(shù)據(jù)庫的數(shù)據(jù)查詢方法。該方法通過將JSON格式的規(guī)則文件解析后存入數(shù)據(jù)庫中,動(dòng)態(tài)地與數(shù)據(jù)關(guān)鍵字對比,從而得到符合約束條件的表單數(shù)據(jù);并通過實(shí)驗(yàn)對比了DRL規(guī)則文件、決策表文件方法和修正數(shù)據(jù)庫在大數(shù)據(jù)環(huán)境下查詢數(shù)據(jù)的性能。實(shí)驗(yàn)結(jié)果證明:修正數(shù)據(jù)庫方法可以有效減少數(shù)據(jù)匹配的冗余。
規(guī)則引擎本質(zhì)上是一種推理引擎[5],通過將事實(shí)、數(shù)據(jù)與產(chǎn)生式規(guī)則進(jìn)行匹配,并在規(guī)則庫中對規(guī)則進(jìn)行統(tǒng)一管理,最終匹配的規(guī)則將被執(zhí)行[6]。規(guī)則引擎將代碼與業(yè)務(wù)部分進(jìn)行區(qū)分,使業(yè)務(wù)決策變?yōu)橐粋€(gè)單獨(dú)的部分。其核心工作就是獲取規(guī)則映射的知識,再將其應(yīng)用到特定的數(shù)據(jù)上。規(guī)則生產(chǎn)寄存器中可以通過解析將復(fù)雜的規(guī)則用清晰的形式表達(dá)出來。圖1為Drools規(guī)則引擎的運(yùn)行機(jī)制[7]。
圖1 Drools規(guī)則引擎的運(yùn)行機(jī)制
在Drools規(guī)則引擎的結(jié)構(gòu)中,事實(shí)是對象之間、對象屬性之間的關(guān)系,并且事實(shí)存在于工作區(qū)域中,是普通業(yè)務(wù)對象的結(jié)果集[8]。規(guī)則是業(yè)務(wù)人員根據(jù)工作需求使用規(guī)則引擎提供的接口來編寫的規(guī)則文件(在Drools規(guī)則引擎中可以是DRL規(guī)則文件也可以是XLS決策表)。將規(guī)則文件加載至內(nèi)存中,可以對事實(shí)進(jìn)行一系列的操作,從而進(jìn)行篩選[9]。
Forgy[10]在1979年提出的Rete算法,是產(chǎn)生式系統(tǒng)高效的模式匹配算法。Rete算法利用規(guī)則各個(gè)域之間的公用部分,減少規(guī)則的存儲。同時(shí)為了保證匹配過程中的速度,Rete算法保存匹配過程中的臨時(shí)結(jié)果[11]。為了保存臨時(shí)結(jié)果,算法將規(guī)則拆分,以節(jié)點(diǎn)的形式存在,通過節(jié)點(diǎn)連接成為一個(gè)網(wǎng)絡(luò)。將所有事實(shí)數(shù)據(jù)通過網(wǎng)絡(luò)進(jìn)行規(guī)則篩選。圖2為Rete算法規(guī)則網(wǎng)絡(luò)。
圖2 Rete算法規(guī)則網(wǎng)絡(luò)
Rete匹配網(wǎng)絡(luò)由知識庫、Alpha網(wǎng)絡(luò)、Beta網(wǎng)絡(luò)和輸出集合組成[12]。知識庫是事實(shí)進(jìn)入網(wǎng)絡(luò)的入口,也被稱為root節(jié)點(diǎn)或knowledge節(jié)點(diǎn)。輸出節(jié)點(diǎn)又稱output節(jié)點(diǎn),代表對應(yīng)的規(guī)則經(jīng)過匹配已經(jīng)激活。Alpha網(wǎng)絡(luò)是模式網(wǎng)絡(luò)[13],由規(guī)則庫中的規(guī)則構(gòu)成,用于記錄每一個(gè)匹配條件,每一個(gè)節(jié)點(diǎn)代表一種匹配模式,每一個(gè)模式的所有節(jié)點(diǎn)相連就構(gòu)成一條匹配鏈[14]。Alpha網(wǎng)絡(luò)由alpha節(jié)點(diǎn)構(gòu)成,每個(gè)alpha節(jié)點(diǎn)只有1個(gè)輸入。為了減少重復(fù)計(jì)算量,不同的規(guī)則中若存在不同的模式則可以共用1個(gè)節(jié)點(diǎn)。Beta網(wǎng)絡(luò)是連接網(wǎng)絡(luò)[15],用于檢查規(guī)則內(nèi)部不同模式之間因相同變量造成的約束關(guān)系。Beta網(wǎng)絡(luò)由beta節(jié)點(diǎn)構(gòu)成[16],每個(gè)beta節(jié)點(diǎn)最多可以有2個(gè)輸入。當(dāng)信息傳遞至輸出節(jié)點(diǎn)時(shí)[17],代表Rete網(wǎng)絡(luò)與知識庫對應(yīng)的規(guī)則已經(jīng)被解析激活。
Drools規(guī)則引擎極大地推動(dòng)了行業(yè)的發(fā)展,但仍有很多問題需要解決。DRL文件的語言是類Java語言,需要一定的維護(hù)門檻。若維護(hù)人員對Java較為生疏,則需要一定的學(xué)習(xí)成本。規(guī)則引擎主要應(yīng)用于金融或政務(wù)服務(wù)部門,用于對復(fù)雜的規(guī)則體系以及較為簡單的數(shù)據(jù)進(jìn)行復(fù)雜事物處理。隨著物聯(lián)網(wǎng)設(shè)備的數(shù)量和種類不斷增加,對設(shè)備數(shù)據(jù)的實(shí)時(shí)性要求也隨之增加。物聯(lián)網(wǎng)管理也逐漸呈現(xiàn)多規(guī)則的特點(diǎn)。規(guī)則引擎在建立多規(guī)則的規(guī)則網(wǎng)絡(luò)方面有著獨(dú)特的優(yōu)勢,但大量數(shù)據(jù)進(jìn)行單一的重復(fù)性比對會(huì)造成時(shí)間和資源的浪費(fèi)。
為了驗(yàn)證Drools規(guī)則引擎在物聯(lián)網(wǎng)數(shù)據(jù)查詢中的性能,設(shè)計(jì)的架構(gòu)包括數(shù)據(jù)接入單元、規(guī)則引擎模塊和數(shù)據(jù)庫驅(qū)動(dòng)模塊。其中,數(shù)據(jù)接入模塊模擬物聯(lián)網(wǎng)傳輸數(shù)據(jù),用于存儲不同量級的數(shù)據(jù);規(guī)則引擎模塊用于物聯(lián)網(wǎng)數(shù)據(jù)查詢語句規(guī)則的解析和數(shù)據(jù)約束條件的解析處理;數(shù)據(jù)庫驅(qū)動(dòng)模塊用于連接規(guī)則引擎與數(shù)據(jù)庫,使得解析后的查詢語句和查詢到的數(shù)據(jù)可以繼續(xù)解析處理。
規(guī)則引擎模塊是整個(gè)實(shí)驗(yàn)系統(tǒng)的核心部分。支持用戶根據(jù)實(shí)際靈活定義規(guī)則。匹配規(guī)則分別通過DRL規(guī)則文件、決策表和修正數(shù)據(jù)庫的方式定義。傳入規(guī)則引擎的待解析實(shí)例采用JSON格式文件,用于描述數(shù)據(jù)庫查詢語言和數(shù)據(jù)的約束條件。實(shí)例通過規(guī)則引擎按照規(guī)則的設(shè)定解析成標(biāo)準(zhǔn)的查詢語句并獲取數(shù)據(jù)的約束條件,最后通過數(shù)據(jù)庫查找到符合查詢規(guī)則和數(shù)據(jù)約束條件的數(shù)據(jù)。
DRL規(guī)則文件描述規(guī)則時(shí)一般包含表1所示的內(nèi)容。
表1 DRL文件語法示例
其中,package為定義規(guī)則文件的包名,代表程序?qū)σ?guī)則的指示,不代表真實(shí)規(guī)則的存儲路徑;import是需要導(dǎo)入的類名,由于DRL文件用類Java語言編寫,故可以導(dǎo)入外部定義的變量和公共的靜態(tài)方法;rule代表規(guī)則的開始,并且用唯一的規(guī)則名標(biāo)識;salience為規(guī)則的優(yōu)先級,在有多條規(guī)則時(shí),其數(shù)字越大,相應(yīng)規(guī)則的優(yōu)先級程度越高[18];when之后為條件部分[19],定義了當(dāng)前規(guī)則的條件,此部分可以有零或多個(gè)條件;結(jié)果部分處于then與end之間,是滿足條件之后需要執(zhí)行的動(dòng)作,這部分語句可以用Java語言編寫,end代表此規(guī)則結(jié)束。
采用DRL規(guī)則文件方式的工作流程如圖3所示。
圖3 采用DRL規(guī)則文件方式的工作流程
DRL文件中存儲的是解析實(shí)例的規(guī)則,將DRL文件導(dǎo)入到規(guī)則引擎的指定路徑,規(guī)則引擎開始根據(jù)規(guī)則文件進(jìn)行查詢語句的解析,循環(huán)遍歷所有規(guī)則,將滿足查詢語句規(guī)則約束條件的終節(jié)點(diǎn)取出拼接成標(biāo)準(zhǔn)的數(shù)據(jù)庫查詢語句;利用關(guān)于數(shù)據(jù)的約束條件的節(jié)點(diǎn)形成規(guī)則網(wǎng)絡(luò);使用JDBC連接數(shù)據(jù)庫查詢到相應(yīng)表單的數(shù)據(jù)后,數(shù)據(jù)作為實(shí)例通過數(shù)據(jù)規(guī)則網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)篩選,最后輸出合適的數(shù)據(jù)。
決策表是一個(gè)精確且緊湊的表示邏輯的方式,目前決策表支持的文件格式主要有XLS、CSV,其可以與DRL規(guī)則文件實(shí)現(xiàn)無縫替換。表2為決策表使用格式。
表2 決策表使用格式
其中,RuleSet相當(dāng)于DRL文件中的package,用于定義規(guī)則的包名;Import是規(guī)則文件中需要導(dǎo)入的類名,可以導(dǎo)入外部定義的變量和公共的靜態(tài)方法;CONDITION是規(guī)則的觸發(fā)文件;ACTION為對應(yīng)條件觸發(fā)后的動(dòng)作,一般與CONDITION是并行存在的。需要注意的是,決策表判斷的條件參數(shù)需要在文件下方列出,通過傳參的方式進(jìn)行比較。決策表也可在需要的時(shí)候解析為普通的DRL文件使用。
決策表在編譯時(shí),也需要與DRL文件一樣在kmodule.xml模塊中配置相應(yīng)的標(biāo)識,并在規(guī)則引擎會(huì)話開始時(shí)導(dǎo)入相應(yīng)的標(biāo)識。圖4為決策表實(shí)現(xiàn)流程。
圖4 決策表實(shí)現(xiàn)流程
編寫好相應(yīng)的解析查詢語句規(guī)則和數(shù)據(jù)匹配規(guī)則的決策表文件導(dǎo)入規(guī)則引擎指定路徑并在kmodule.xml中配置好規(guī)則文件標(biāo)識。觸發(fā)規(guī)則引擎和節(jié)點(diǎn)后,會(huì)循環(huán)查找規(guī)則文件中的CONDITION,并與ACTION部分進(jìn)行解析與處理,獲得查詢語句和數(shù)據(jù)約束條件的網(wǎng)絡(luò)。通過數(shù)據(jù)庫獲取數(shù)據(jù)后會(huì)繼續(xù)匹配數(shù)據(jù)規(guī)則,并篩選出符合條件的數(shù)據(jù),最后會(huì)輸出符合查詢條件的數(shù)據(jù)。
2.1節(jié)和2.2節(jié)所述方式要先建立查詢語句與數(shù)據(jù)匹配規(guī)則網(wǎng)絡(luò)之后再將數(shù)據(jù)導(dǎo)入規(guī)則網(wǎng),導(dǎo)致所有的數(shù)據(jù)均要通過匹配網(wǎng)絡(luò)進(jìn)行匹配。這使得大量的無關(guān)數(shù)據(jù)會(huì)在節(jié)點(diǎn)中進(jìn)行比較,因此會(huì)消耗較多的時(shí)間。修正數(shù)據(jù)庫采用JSON格式的規(guī)則語句,通過規(guī)則引擎進(jìn)行JSON規(guī)則的解析,并將解析得到的規(guī)則類型和數(shù)據(jù)的約束條件存入數(shù)據(jù)庫中。在存入規(guī)則類型的同時(shí),規(guī)則引擎操作數(shù)據(jù)庫根據(jù)解析規(guī)則類型選擇相應(yīng)的表單,并將表單數(shù)據(jù)與解析的數(shù)據(jù)約束條件進(jìn)行比較篩選。循環(huán)此過程直至規(guī)則解析結(jié)束,此時(shí),獲取的表單數(shù)據(jù)就是滿足查詢條件的數(shù)據(jù)。圖5為修正數(shù)據(jù)庫實(shí)現(xiàn)流程。
圖5 修正數(shù)據(jù)庫實(shí)現(xiàn)流程
修正數(shù)據(jù)庫架構(gòu)較DRL規(guī)則文件方法和決策表文件方法的改進(jìn)體現(xiàn)在:使用JSON數(shù)據(jù)格式的規(guī)則文件,解析速度較快;數(shù)據(jù)篩選與解析規(guī)則是在同一時(shí)間進(jìn)行,雖然損失了一些解析時(shí)間,但優(yōu)化了數(shù)據(jù)查詢輸出的時(shí)間;不需要頻繁地更換規(guī)則文件,只需改變相應(yīng)的JSON格式文件的內(nèi)容。
修正數(shù)據(jù)庫方式具體工作流程如下。
(1)用JSON格式的語句描述需要查詢語句的規(guī)則以及相應(yīng)的數(shù)據(jù)約束條件。
(2)配置入規(guī)則引擎進(jìn)行相應(yīng)格式的解析。
① 解析到對應(yīng)數(shù)據(jù)的表單關(guān)系。
② 通過JDBC連接數(shù)據(jù)庫并將相應(yīng)的表單數(shù)據(jù)存入庫中,同時(shí)建立網(wǎng)絡(luò)。
③ 依次解析數(shù)據(jù)約束格式并存入與2.2節(jié)對應(yīng)的表單中。
④ 根據(jù)已解析部分規(guī)則網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)篩選,并將數(shù)據(jù)結(jié)果暫存。
(3)重復(fù)執(zhí)行①~④,直至所有規(guī)則及約束條件完全解析。
(4)根據(jù)解析結(jié)果選擇對應(yīng)的表單數(shù)據(jù)。
為了更好地比較規(guī)則引擎在物聯(lián)網(wǎng)數(shù)據(jù)管理中的應(yīng)用,本文設(shè)置了2組實(shí)驗(yàn)。第一組為分析相同規(guī)則數(shù)不同實(shí)例數(shù)和相同實(shí)例數(shù)不同規(guī)則數(shù)對規(guī)則引擎性能的影響。第二組為基于大數(shù)據(jù)量的查詢對DRL規(guī)則文件方法、決策表方法和修正數(shù)據(jù)庫方法進(jìn)行進(jìn)一步的評估。實(shí)驗(yàn)軟硬件環(huán)境配置如表3所示。
表3 實(shí)驗(yàn)環(huán)境配置
(1)實(shí)驗(yàn)一:為了適應(yīng)多規(guī)則配置的方便性,使用DRL文件進(jìn)行配置,分別設(shè)置規(guī)則數(shù)為10條、100條、200條、500條的規(guī)則文件,并分別用500例、1500例、3000例、5000例、7500例、10000例通過不同的規(guī)則,規(guī)則數(shù)與實(shí)例數(shù)耗時(shí)如圖6所示。
由圖6可知,隨著規(guī)則數(shù)量的增加,規(guī)則建網(wǎng)時(shí)間也隨之增加,同一數(shù)量級實(shí)例數(shù)通過不同規(guī)則文件的總耗時(shí)不同,并且時(shí)間增加主要與建網(wǎng)時(shí)間的增加有關(guān);規(guī)則數(shù)相同,不同實(shí)例數(shù)經(jīng)過規(guī)則引擎時(shí),時(shí)間增加呈現(xiàn)正相關(guān)關(guān)系。在實(shí)例數(shù)一定時(shí),規(guī)則數(shù)的增加會(huì)使實(shí)例匹配的時(shí)間變長。尤其是規(guī)則數(shù)達(dá)到500后,規(guī)則的冗余性變強(qiáng),匹配的增幅變大。由此可知,在物聯(lián)網(wǎng)規(guī)則引擎設(shè)計(jì)中,選取適量的規(guī)則數(shù)有利于提升物聯(lián)網(wǎng)管理系統(tǒng)的性能。
圖6 規(guī)則數(shù)與實(shí)例數(shù)耗時(shí)
(2)實(shí)驗(yàn)二:通過將隨機(jī)生成數(shù)據(jù)存入數(shù)據(jù)庫模擬設(shè)備運(yùn)行期間發(fā)送的各種數(shù)據(jù)。隨機(jī)數(shù)據(jù)是通過設(shè)置數(shù)據(jù)整體格式,通過Java隨機(jī)產(chǎn)生不同的數(shù)據(jù)。為了對比不同方式對不同數(shù)據(jù)量的處理性能,實(shí)驗(yàn)分別設(shè)置了5000條、10000條、100000條和1000000條數(shù)據(jù)的表單,分別用DRL規(guī)則文件、決策表文件和修正數(shù)據(jù)庫3種方法對規(guī)則進(jìn)行解析并查詢相應(yīng)數(shù)據(jù)。所有測試數(shù)據(jù)保持格式統(tǒng)一。不同配置方法查詢同一量級數(shù)據(jù)時(shí),數(shù)據(jù)類型和數(shù)據(jù)內(nèi)容保持一致。評判標(biāo)準(zhǔn)為總耗時(shí)時(shí)間、解析規(guī)則時(shí)間和查詢輸出時(shí)間。以程序開始為總計(jì)時(shí)起點(diǎn)、程序結(jié)束為計(jì)時(shí)終點(diǎn),以此得到總時(shí)間。輸出的第一條數(shù)據(jù)作為計(jì)算查詢輸出數(shù)據(jù)時(shí)間的起點(diǎn)。修正數(shù)據(jù)庫方法、DRL規(guī)則文件方法和決策表文件方法的測試性能如表4所示。
表4 不同配置方法的測試性能
系統(tǒng)的并發(fā)量可以用吞吐量(Throughput)來衡量。表4中的吞吐量為標(biāo)準(zhǔn)時(shí)間內(nèi)的吞吐量,即單位時(shí)間的吞吐量(單位為條),計(jì)算公式為
(1)
式中:m1為t1時(shí)刻處理的數(shù)據(jù)總量;m2為t2時(shí)刻處理的數(shù)據(jù)總量;Throughput為t1和t2期間系統(tǒng)處理數(shù)據(jù)的平均吞吐量。
由表4可得,隨著各種方式數(shù)據(jù)量的增加,總耗時(shí)隨之增加,并且吞吐量也會(huì)有所增加。對比3種不同方法對于同一數(shù)據(jù)量級的性能,修正數(shù)據(jù)庫方法的總耗時(shí)和吞吐量均優(yōu)于DRL規(guī)則文件方法和決策表文件方法。
圖7~圖10為在4種不同數(shù)據(jù)量級下3種配置方法的性能對比。查詢總時(shí)間由解析時(shí)間與數(shù)據(jù)匹配查詢時(shí)間構(gòu)成,具體數(shù)據(jù)如表5所示。由圖7~圖10可知,在同一數(shù)量級的前提條件下,修正數(shù)據(jù)庫方法的查詢總時(shí)間相對于DRL規(guī)則文件方法和決策表文件方法有明顯改善。
圖8 10000條數(shù)據(jù)查詢時(shí)間
圖9 100000條數(shù)據(jù)查詢時(shí)間
圖10 1000000條數(shù)據(jù)查詢時(shí)間
表5 不同配置方法的性能分析 單位:s
由表5可知,DRL規(guī)則文件方法與決策表文件方法解析時(shí)間有些許不同,DRL規(guī)則文件方法通過規(guī)則引擎分解規(guī)則建立規(guī)則網(wǎng)絡(luò),故速度更快。決策表文件方法需要讀取決策表文件并將決策表內(nèi)語言轉(zhuǎn)換為相應(yīng)的格式,所以解析性能相較DRL規(guī)則文件方法略有下降。在數(shù)據(jù)篩選查詢階段,兩種方法的耗時(shí)差異較小,均是所有數(shù)據(jù)一一進(jìn)入網(wǎng)絡(luò)進(jìn)行匹配。修正數(shù)據(jù)庫方法的解析規(guī)則和約束關(guān)系時(shí)間較長,這是因?yàn)樾拚龜?shù)據(jù)庫方法在解析規(guī)則時(shí),將規(guī)則和約束條件解析至數(shù)據(jù)庫存儲后進(jìn)行動(dòng)態(tài)篩選,故解析時(shí)間有所增加。
修正數(shù)據(jù)庫方法中,解析時(shí)間占據(jù)了大部分查詢總時(shí)間,這是因?yàn)榻馕鲆?guī)則和數(shù)據(jù)初篩選是在一起的,隨著規(guī)則解析結(jié)束和數(shù)據(jù)初篩選的結(jié)束,可以一次性獲得數(shù)據(jù)庫中的表單數(shù)據(jù)。雖然修正數(shù)據(jù)庫方法解析時(shí)會(huì)有相對較多的時(shí)間損耗,但是數(shù)據(jù)匹配查詢時(shí)間會(huì)大幅減少,因此其查詢總時(shí)間可以快速超過DRL規(guī)則文件方法和決策表文件方法,圖7~圖9中的交點(diǎn)就是修正數(shù)據(jù)庫方法查詢總時(shí)間逼近DRL規(guī)則文件方法的時(shí)間點(diǎn)。相較于DRL規(guī)則文件和決策表文件架構(gòu),修正數(shù)據(jù)庫架構(gòu)雖然損失了一部分解析時(shí)間,但是對于大數(shù)據(jù)量的查詢總時(shí)間有較大的改善作用,對規(guī)則內(nèi)部形式較為單一且規(guī)則數(shù)量、數(shù)據(jù)數(shù)量大的場景有著較好的性能。
針對DRL規(guī)則文件和決策表文件架構(gòu)在數(shù)據(jù)查詢中出現(xiàn)的重復(fù)比對冗余問題,設(shè)計(jì)了一種修正數(shù)據(jù)庫的數(shù)據(jù)查詢方法,并給出了該方法的工作流程。通過實(shí)驗(yàn)分析了Drools規(guī)則引擎中規(guī)則數(shù)、實(shí)例數(shù)與查詢性能之間的關(guān)系,以及DRL規(guī)則文件、決策表文件和修正數(shù)據(jù)庫方法在不同量級數(shù)據(jù)環(huán)境下的查詢性能。實(shí)驗(yàn)結(jié)果表明:修正數(shù)據(jù)庫數(shù)據(jù)查詢方法減少了無效數(shù)據(jù)的重復(fù)比對,減少了冗余,有效地提高了數(shù)據(jù)查詢的性能。