Drools等规则引擎技术对比分析
项目中需要设计开发一个规则引擎服务,于是调研了业界常用的规则引擎。
常见的规则引擎如下:
Ilog JRules 是最有名的商用BRMS;
Drools 是最活跃的开源规则引擎;
Jess 是Clips的java实现,就如JRuby之于Ruby,是AI系的代表;
Visual Rules(旗正规则引擎)国内商业规则引擎品牌,可以认为是ILOG的本土版本。
Mandarax是一个规则引擎的纯Java实现。基于反向推理(归纳法)。
对比如下:
1、四者都主要使用foreward-chaining的Rete引擎,按优先级匹配条件语句,实施规则语句。规则实施后会激发事实的变化,引擎又会重新进行条件匹配,直到不能再匹配为止,Rete的算法保证了服从的最高。
(1). Rete 算法的特点:
a. Rete 算法是一种启发式算法,不同规则之间往往含有相同的模式,因此在 beta-network 中可以共享 BetaMemory 和 betanode。如果某个 betanode 被 N 条规则共享,则算法在此节点上效率会提高 N 倍。
b. Rete 算法由于采用 AlphaMemory 和 BetaMemory 来存储事实,当事实集合变化不大时,保存在 alpha 和 beta 节点中的状态不需要太多变化,避免了大量的重复计算,提高了匹配效率。
c. 从 Rete 网络可以看出,Rete 匹配速度与规则数目无关,这是因为事实只有满足本节点才会继续向下沿网络传递。
(2). Rete 算法的不足:
a. 事实的删除与事实的添加顺序相同, 除了要执行与事实添加相同的计算外, 还需要执行查找, 开销很高 。
b. RETE 算法使用了β存储区存储已计算的中间结果, 以牺牲空间换取时间, 从而加快系统的速度。然而β存储区根据规则的条件与事实的数目而成指数级增长, 所以当规则与事实很多时, 会耗尽系统资源。
(3)针对 Rete 算法的特点和不足,在应用或者开发基于 Rete 算法的规则引擎时,改进方向:
a. 容易变化的规则尽量置后匹配,可以减少规则的变化带来规则库的变化。
b. 约束性较为通用或较强的模式尽量置前匹配,可以避免不必要的匹配。
c. 针对 Rete 算法内存开销大和事实增加删除影响效率的问题,技术上应该在 alpha 内存和 beata 内存中,只存储指向内存的指针,并对指针建里索引(可用 hash 表或者非平衡二叉树)。
d. Rete 算法 JoinNode 可以扩展为 AndJoinNode 和 OrJoinNode,两种节点可以再进行组合 。
2、Ilog JRules 和 Visual Rules 是商业版
3、Drools vs ILog vs Jess vs Mandarax
最新文章
- Hadoop技巧系列索引
- 具备 jQuery 经验的人如何学习AngularJS(附:学习路径)
- 关于网络-get/post
- STM32 Cube固件库编程之新建工程
- java异常处理机制
- 161017、SQL必备知识点
- GetMemory
- Oracle 12c创建用户时出现“ORA-65096: invalid common user or role name”的错误
- SQL,学习基础2
- 如何实现android蓝牙开发 自动配对连接,并不弹出提示框
- React Native学习(七)—— FlatList实现横向滑动列表效果
- scrapy爬取小说盗墓笔记
- 《ASP.NET MVC 5 高级编程》学习笔记
- thinkphp v5.1 开发笔记
- 一脸懵逼学习HBase---基于HDFS实现的。(Hadoop的数据库,分布式的,大数据量的,随机的,实时的,非关系型数据库)
- 【AtCoder】ARC071
- 渲染函数render和函数式组件
- iptables nat 外网nat到内网在只限制外网访问的单一ip地址
- lumen 使用 laravel-cors 的时候, 使用 dd 函数的解决方法
- windows平台的游戏运行库
热门文章
- c语言小项目-使用mysql数据库的图书管理系统
- [ZJOI2008]杀蚂蚁
- web测试--登录界面怎么测?
- 联想 Z5 Pro(L78031)免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖ZUI 10.0.355
- hashtable的用法
- apache自带的ab压力测试工具
- Java学习4_一些基础4_输入输出_16.5.7
- 音视频】5.ffmpeg命令分类与使用
- 梦想CAD控件关于比较问题
- 弹性分布式数据集(RDD)