Drools DMN最新开源引擎性能改进

我们一直在寻求改善Drools DMN开源引擎的性能。 我们最近审查了DMN用例,其中输入数据节点的实际输入总体有所不同。 这突出显示了引擎的次佳性能,我们在最新版本中对此进行了改进。 我想分享我们的发现!

基准制定

当我们开始为该用例运行一个支持基准测试时,尤其是在调查具有稀疏填充的输入数据节点的大型DMN模型的场景时,我们注意到了一些奇怪的结果:火焰记录仪数据突出显示了记录消息时的性能严重下降,这非常消耗与应用逻辑本身相比,花费了大量时间。

该火焰图特别强调了测井框架人为地引起的堆栈跟踪合成消耗了大量时间。 在这种情况下,纠正措施是调整日志记录配置以避免此问题。 具体来说,我们禁用了日志记录框架的一项功能,该功能在调试活动期间非常方便,从而可以快速定位原始的调用类和方法:不幸的是,此功能的代价是合成堆栈跟踪,该跟踪最初污染了基准测试结果。 从这里学到的教训:请始终先检查非功能性需求是否真的掩盖了真正的问题!

在继续更详细地研究用例之前,这是必要且可行的步骤。

改善表现

继续并专注于DMN优化,我们专门开发了一个通用性很强的基准,同时也重点介绍了已提供给我们的用例。 该基准包含一个DMN模型,其中包含许多要评估的决策节点(500个)。 另一个参数控制输入数据节点的稀疏性以进行评估; 范围从值1(填充所有输入)到值2(仅填充两个输入中的一个),等等。

事实证明,该特定基准是突出一些潜在改进的非常有用的工具。

将比较基准设置为Drools 7.23.0版。最终,使用DROOLS-4204实现的第一个优化专注于在评估FEEL表达式的同时改善上下文处理,并证明可提供约3倍的改进,而使用DROOLS-4266进行的进一步优化则专注于特定决策表输入子句的用例表明,在DROOLS-4204的基础上,附加的〜2倍改进。

我们还在下图中收集了这些度量。

该图突出显示了当稀疏因子等于1时(填充所有输入时)的复合改进。 这是一个非常重要的结果,因为实际上它确实代表了原始用例中的主要 “快乐路径”场景。

换句话说,与在相同的用例上运行相比,我们实现了约6倍的改进

7.23.0。最终版 我在这里学到的教训是,在可能的情况下,始终努力争取这些复合的改进,因为它们确实可以彼此叠加,以获得更大的效果!

为了完整起见,我们使用以下度量重复分析,其稀疏因子等于2(实际上每2个输入填充1个)和50个(实际上每50个输入填充1个),并进行以下测量:

结果表明,对于等于2的稀疏因子,优化也很重要,但是随着该因子的增加,相关的改进并不明显-这是可以预期的,因为决策节点评估对整体执行逻辑的影响现在变得不那么重要了。

为了完整起见,还对包含多个规则行的单个决策表使用了另一个已经存在的基准进行分析:

结果表明,这些代码更改从整体上来看仍然可以提供相关的改进; 虽然显然不相同幅度为原来使用-情况。 这是另一项重要检查,以确保这些改进不适合特定用例。

结论

以Drools版本7.23.0.Final为基准,以及包含DMN模型和许多待评估决策节点的参考基准,我们实施了多项优化,这些优化一旦结合在一起,就可以使该特定项目的总速度提高约6倍用例!

我希望这是一篇有趣的文章,以强调要取得更好性能的一些方面; 让我们知道您的想法和反馈。

今天,您已经可以从Drools最新版本中的Kie DMN开源引擎改进中受益!

翻译自: https://www.javacodegeeks.com/2019/08/drools-dmn-performance-improvements.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

今晚课题:2019-3-23

今晚课题剖析《服务器高并发-IOCP模型架构》上课时间:2019/03/23 20:30--22:30授课讲师:杰越教育C/C学院--Vico课程链接:https://ke.qq.com/course/353889?tuin7472c9c 课程内容: 1、C/C编程语言入门精通 2、C线程技术在服务器…

使用Selenium WebDriver测试自动化的22条实用技巧

使用Selenium进行测试自动化已使全球的网站测试人员能够轻松执行自动化的网站测试。 Webdriver是Selenium框架的核心组件,通过它您可以针对不同类型的浏览器(例如Google Chrome,Mozilla Firefox,Safari,Opera&#xff…

这么奇葩搞笑的代码注释你见过吗

程序员作为一种“异类”,虽然他们平时给人们的留下的印象并不太好,觉得他们只会写代码。但是有的时候不得不佩服他们天马行空的想象力,他们可能会利用注释让你噗嗤一笑,下面我们来看看那些奇葩搞笑的代码注释吧。注释1&#xff1a…

C语言与Java的深情对话:儿子,还得多练几年啊!老子还是老子

很多小伙伴都老是会碰到疑问,其实还是基础没打扎实,这些题如果你不看答案你能知道多少呢?如果还有很多不知道就证明基础没打扎实,如果你还在入门纠结,如果你还在苦恼怎么入门!小编有个建议,可以…

BAT人脸识别功能第二步-人脸检测

今晚课题点击【阅读原文】或长按图片【识别图中的二维码】即可参加今晚的课程。

java中插入排序实例_java中对插入排序的理解以及实例

一、基本思想通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。插入排序非常类似于整扑克牌。在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌&a…

经典游戏底层框架--迷宫游戏构成原理剖析

今晚课题点击【阅读原文】或长按图片【识别图中的二维码】即可参加今晚的课程。

突破100万年薪《多线程服务器端架构》

今晚课题点击【阅读原文】或长按图片【识别图中的二维码】即可参加今晚的课程。

Java中的观察者设计模式

在本教程中,我们将讨论Observer设计模式。 观察者模式有两个主要方面- 主题和观察者 。 当我们的系统有多个对象(称为观察者)时 ,将使用一个模式,该对象依赖于一个特定对象( 主体)的状态 。 所…

java class api 中文乱码_SpringMVC之springmvc原始api,请求中文乱码问题

先搞一波效果图1.Controllerpackage com.tz.controller;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Required;import org.springframe…

从流水线工人,到谷歌上班的程序媛

非科班、转行当程序员的励志故事有很多,我们在 8 年前扩散分享过一个国外的故事:我来自于一个东欧国家。我在一个煤矿里工作了很多年(在一个很深的矿井里)。每天我都处在危险中,那些年都是这样度过的。后来我感觉过够了…

jsp中的java部分_jsp页面的七个组成部分

jsp页面的七个组成部分1. 静态内容:前端内容一行一行翻译成 out.write(“前端内容”);2. 指令: 第一个指令是pagepage指令的第一个标准用法,告诉servlet容器,这是一个jsp页面pageEncoding 指…

java多线程做一件事_关于Java的十件事

java多线程做一件事那么,您从一开始就一直在使用Java? 还记得那些被称为“ Oak”的日子,OO仍然是热门话题,C 人士认为Java没有机会,Applet还是一件事吗? 我敢打赌,您至少不了解以下一半内容。 …

打造大型直播平台之《PC客户端架构》

今晚课题点击【阅读原文】或长按图片【识别图中的二维码】即可参加今晚的课程。

Java中的装饰器设计模式

装饰器设计模式允许在运行时将附加职责或行为动态附加到对象。 它是一种结构模式,利用聚合来组合这些行为。 在本教程中,我们将学习实现装饰器模式。 UML图: 让我们从装饰器模式的UML表示开始: ConcreteComponent类是我们希望为…

冲击波病毒攻击-《截获网站服务器数据》

今晚课题点击【阅读原文】或长按图片【识别图中的二维码】即可

用户控件 自定义控件_新的自定义控件:TaskProgressView

用户控件 自定义控件我已经编写了一个新的自定义控件,并将其提交到ControlsFX项目。 这是一个高度专业的控件,用于显示后台任务,其当前状态和进度的列表。 这实际上是我为ControlsFX编写的第一个控件,只是出于乐趣的考虑&#xff…

C/C++码农到工程师进化之路

今晚课题长按图片【识别图中的二维码】

Java中的复合设计模式

当我们必须使用对象的树状分层结构时,复合设计模式非常有用。 它使我们能够统一对待单个对象和对象的组成。 它属于结构设计模式的范畴,因为它将对象组合成树形结构以表示部分整个层次结构。 UML表示形式: 复合模式的UML表示形式如下&#…

腾讯官方游戏《陆战之王 3D坦克大战》

今晚课题长按图片【识别图中的二维码】