drools dmn_Drools DMN最新开源引擎性能改进

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

drools dmn

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

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

相关文章

制作FAT12软盘以查看软盘的根目录条目+文件属性+文件内容

【-1】Before for specific info , please visit http://wiki.osdev.org/Loopback_Device 【0】我们先上干货,看到效果后,我们再说明每个步骤的缘由; 【1】进入挂载目录,添加相关文件(依个人意愿) Attenti…

如何取消高亮显示重复项_如何将重复数据突出显示?

将表格中一列数据中重复的,使用特殊颜色突出显示或者使用一些符号标记出来。例如:一个供应商,可以邀请别的供应商加入成为联合体,报表要显示所有供应商,然后供应商最后一列显示所有联合体,当联合体供应商跟…

Maven的maven-source-plugin插件详解

maven-source-plugin 这个插件专门负责将项目源文件打成包的&#xff0c;该插件在 pom.xml 中的配置如下&#xff1a; <build><plugins><plugin><artifactId>maven-source-plugin</artifactId><version>3.0.1</version><configu…

Maven Java Web Project打包详解/如何打包

文章目录打包部署构件&#xff08;Artifacts&#xff09;打源码包方式一&#xff1a; 命令行方式方式二&#xff1a;使用 IDE将源码包发布到本地 Maven 仓库中涉及到案例项目的结构&#xff1a; 打包部署构件&#xff08;Artifacts&#xff09; war 格式的部署构件可以直接放…

四位共阳极数码管显示函数_数码管模块.doc

数码管模块数码管1、概 述数码管模块采用四位共阳极数码管&#xff0c;用于显示数字和少数特殊字符。可以在机器人项目中使用该模块&#xff0c;用于显示速度、时间、分数、温度、距离等传感器的值。同时&#xff0c;Makeblock提供易于编程的Arduino库&#xff0c;使用户能够方…

java中的可检查和不检查_检查Java测试中发生了什么

java中的可检查和不检查有人想到了在Java单元测试中使用try和catch块的想法&#xff1a; Test public void test() { try { callSomeCode(); } catch (Exception e) { assertEquals( "foo" , e.getMessage()); } } 上面的内容很诱人&#xff0c;但不起作用 。 如果…

FAT12中,如何定位大于一个扇区(512B)的文件内容

【0】README 0.1&#xff09;本文旨在于 演示在FAT12中&#xff0c; 如何取定位大于 512B 的文件内容&#xff0c;和查看它&#xff1b;0.2&#xff09;如何制作FAT12文件系统&#xff0c;以及如何向文件中添加temp.txt文件&#xff0c;参见&#xff1a; { http://blog.csdn.n…

通过Struts2的拦截器实现文件上传/上传文件功能

struts.xml配置内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd&qu…

java获取ram_Java:ChronicleMap第2部分,超级RAM映射

java获取ram诸如无处不在的HashMap类的标准Java Map最终受到可用RAM的限制。 阅读本文并了解如何创建几乎无限大小甚至超过目标计算机RAM大小的Java Map。 内置的Map实现&#xff0c;例如HashMap和ConcurrentHashMap &#xff0c;只要它们相对较小&#xff0c;就可以正常工作。…

lifi与wifi的论文_Wifi_(毕业论文).doc

Wifi_(毕业论文)绪论2第一章 Wi-Fi技术概述31.1 无线局域网络31.1.1 IEEE 802.11系列标准31.1.2 无线局域网络概述31.2 Wi-Fi概念的引入41.2.1 Wi-Fi技术41.2.2 怎样使用Wi-Fi41.2.3 谁可以使用Wi-Fi5第二章 Wi-Fi技术的分析62.1 Wi-Fi与其他技术的对比分析6参 考 文 献8绪论Wi…

os引导程序boot从扇区拷贝os加载程序loader文件到内存(boot copy kernel to mem in the same method)

【0】README 0.1&#xff09; 本代码旨在演示 在boot 代码中&#xff0c;如何 通过 loader文件所在根目录条目 找出该文件的 在 软盘所有全局扇区号&#xff08;簇号&#xff09;&#xff0c;并执行内存中的 loader 代码&#xff1b;0.2&#xff09; 此代码非常重要&#xff0…

Struts2的资源文件和国际化(i18n)

文章目录资源文件的命名资源文件基名的指定struts.xml 文件指定资源文件的基名struts.properties 文件指定资源文件的基名通过标签 i18n 指定资源文件的基名资源文件的位置包级资源文件类级资源文件全局级资源文件默认资源文件资源文件的加载顺序Action 中加载资源文件在 JSP 中…

java设计模式之装饰模式_Java中的装饰器设计模式

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

qml 自定义消息框_Qt qml 自定义消息提示框

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。本文链接&#xff1a;https://blog.csdn.net/a844651990/article/details/78376767Qt qml 自定义消息提示框QtQuick有提供比较传统的信息提示框Mes…

计算机器内存数量+引入和显示ARDS成员

【1】README 1.1&#xff09; 本代码在于读取内存中多个 内存段的地址范围描述符结构体&#xff08;ARDS&#xff09;&#xff0c;有多少个内存段可以用&#xff1b;1.2&#xff09; source code and images in the blog from orange’s implemention of a os 1.3&#xff09;…

Maven Java 项目中,pom.xml 文件的依赖标签作用解读(<dependency/>)

该标签会让 Maven 自动到本地仓库或远程仓库去查找构件&#xff0c;找到后会自动创建项目级别的资源库&#xff0c;然后会将资源库同步到依赖此构件的模块的 classpath 中&#xff0c;也就是模块的依赖库中&#xff0c;如下图所示&#xff1a; classpath 就是类路径&#xff0…

自我审视记录本_春天重新审视战略模式

自我审视记录本这篇博客文章希望展示另一种方法&#xff0c;该方法如何通过依赖注入实现策略模式。 作为DI框架&#xff0c;我选择Spring框架 首先&#xff0c;让我们看一下如何以经典方式实施策略模式。 作为起点&#xff0c;我们有一个HeroController &#xff0c;应该在He…

如何用python编程机器人培训_机器人编程怎么入门?

打个广告(更新于2017.03.30)坐标上海&#xff0c;上海微创医疗器械(集团)有限公司&#xff0c;机器人子公司在研产品主要是腹腔镜手术机器人、骨科手术机器人等招聘&#xff1a;机器人算法工程师软件工程师机器人控制工程师具体岗位要求&#xff0c;请移步另一个回答&#xff1…

Struts2的校验器详解/验证框架详解/校验框架详解

文章目录简介使用校验器步骤演示案例常用校验器requiredrequiredstringstringlengthregexintdoublefieldexpressionemailurldateconversionvisitorexpression参考简介 Struts2 的校验器是在后端对前端提交的数据进行校验&#xff0c;在调用 Action 的指定方法前会先调用校验器…

os引导程序boot 在根目录区寻找os加载程序文件loader 对应的根目录条目

【0】README 0.0&#xff09; source code from orange’s implemention of a os and for complete code , please visit https://github.com/pacosonTang/Orange-s-OS/blob/master/boot.asm0.1&#xff09;本代码仅用于在 根目录区条目中寻找 与 boot代码定义的LoaderFileName…