Drools使用了Rete算法膏萧,Rete算法是一種前向規(guī)則快速匹配算法,其匹配速度與規(guī)則數(shù)目無關(guān)俯树。Rete是拉丁文,對應(yīng)英文是net贰盗,也就是網(wǎng)絡(luò)许饿。Rete算法通過形成一個rete網(wǎng)絡(luò)進行模式匹配,利用基于規(guī)則的系統(tǒng)的兩個特征舵盈,即時間冗余性(Temporal redundancy)和結(jié)構(gòu)相似性(structural similarity)陋率,提高系統(tǒng)模式匹配效率球化。
簡單來說,規(guī)則引擎在對規(guī)則文件進行編譯的時候翘贮,會把規(guī)則文件中多個條件作為alpha節(jié)點串聯(lián)起來赊窥,如果多個規(guī)則文件有相同的條件時就共用一個節(jié)點。beta節(jié)點用于表示條件的組合狸页,beta節(jié)點左邊輸入多個節(jié)點锨能,右邊輸入單個節(jié)點。通過beta節(jié)點可以找到命中的規(guī)則文件芍耘。當(dāng)傳入一個fact時址遇,fact會沿著節(jié)點傳遞,所有節(jié)點都有存儲功能斋竞,可以保留到搭過的fact和語義倔约,使用空間換時間的方式,提升下次匹配規(guī)則的速度坝初。詳細的規(guī)則解釋可以看參考鏈接浸剩。
參考: