Drools使用了Rete算法,Rete算法是一種前向規(guī)則快速匹配算法,其匹配速度與規(guī)則數(shù)目無(wú)關(guān)。Rete是拉丁文,對(duì)應(yīng)英文是net,也就是網(wǎng)絡(luò)。Rete算法通過(guò)形成一個(gè)rete網(wǎng)絡(luò)進(jìn)行模式匹配,利用基于規(guī)則的系統(tǒng)的兩個(gè)特征,即時(shí)間冗余性(Temporal redundancy)和結(jié)構(gòu)相似性(structural similarity),提高系統(tǒng)模式匹配效率。
簡(jiǎn)單來(lái)說(shuō),規(guī)則引擎在對(duì)規(guī)則文件進(jìn)行編譯的時(shí)候,會(huì)把規(guī)則文件中多個(gè)條件作為alpha節(jié)點(diǎn)串聯(lián)起來(lái),如果多個(gè)規(guī)則文件有相同的條件時(shí)就共用一個(gè)節(jié)點(diǎn)。beta節(jié)點(diǎn)用于表示條件的組合,beta節(jié)點(diǎn)左邊輸入多個(gè)節(jié)點(diǎn),右邊輸入單個(gè)節(jié)點(diǎn)。通過(guò)beta節(jié)點(diǎn)可以找到命中的規(guī)則文件。當(dāng)傳入一個(gè)fact時(shí),fact會(huì)沿著節(jié)點(diǎn)傳遞,所有節(jié)點(diǎn)都有存儲(chǔ)功能,可以保留到搭過(guò)的fact和語(yǔ)義,使用空間換時(shí)間的方式,提升下次匹配規(guī)則的速度。詳細(xì)的規(guī)則解釋可以看參考鏈接。

參考: