`
eyejava
  • 浏览: 1268630 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jboss rules3.1m终于用了一个el:mvel,性能与ognl的对比有些让人吃惊

阅读更多
引用

Later I will also move templates from StringTemplate to MVEL, our template use is minimal so we don't really care what we use. MVEL is a needed dependency and already provides templates, so we might as well use that. The added bonus is that StringTemplate still relies on antlr-2.7.7, so I'll be able to remove 2 more dependencies.

按照这个本意仅仅是想减少两个包的依赖..丝毫不提mvel的优越性能啊,我倒看中这一点,目前项目中的规则运算巨慢,不过主要原因是hibernate查询导致的...

下面是性能对比:
http://mvel.codehaus.org/Performance+of+MVEL
===============================================
Test Platform        : Java 2 Standard Edition v1.6.0 final
Machine Spec.        : Intel Core Duo T2600 1.66Ghz / 2GB DDR2 533Mhz RAM / Windows Vista RTM
VM Options           : <<none>>
MVEL Build           : 1.2.0 Beta11 w/JIT
OGNL Build           : 2.6.11 Stable
===============================================

Test Name            : Simple String Pass-Through
Expression           : 'Hello World'
Iterations           : 50000
Interpreted Results  :
(OGNL)               : 1344.20ms avg.  (mem delta: -789kb) [1424,1393,1299,1302,1302]
(MVEL)               : 21.80ms avg.  (mem delta: -93kb) [22,21,22,21,23]
Compiled Results     :
(OGNL Compiled)      : 10.00ms avg.  (mem delta: -562kb) [14,9,8,10,9]
(MVEL Compiled)      : 0.60ms avg.  (mem delta: -18kb) [1,0,1,0,1]
------------------------------------------------
Test Name            : Shallow Property
Expression           : data
Iterations           : 50000
Interpreted Results  :
(OGNL)               : 1591.20ms avg.  (mem delta: -782kb) [1594,1603,1590,1588,1581]
(MVEL)               : 49.40ms avg.  (mem delta: -712kb) [49,51,49,49,49]
Compiled Results     :
(OGNL Compiled)      : 34.80ms avg.  (mem delta: -636kb) [35,34,34,36,35]
(MVEL Compiled)      : 1.80ms avg.  (mem delta: -18kb) [2,2,2,2,1]
------------------------------------------------
Test Name            : Deep Property
Expression           : foo.bar.name
Iterations           : 50000
Interpreted Results  :
(OGNL)               : 1955.20ms avg.  (mem delta: -790kb) [1936,1949,1943,1994,1954]
(MVEL)               : 114.80ms avg.  (mem delta: -112kb) [119,113,110,117,115]
Compiled Results     :
(OGNL Compiled)      : 92.80ms avg.  (mem delta: -580kb) [92,92,92,92,96]
(MVEL Compiled)      : 1.80ms avg.  (mem delta: -18kb) [1,2,2,2,2]
------------------------------------------------
Test Name            : Static Field Access (MVEL)
Expression           : Integer.MAX_VALUE
Iterations           : 50000
Interpreted Results  :
(MVEL)               : 90.00ms avg.  (mem delta: -658kb) [88,95,108,80,79]
Compiled Results     :
(MVEL Compiled)      : 2.40ms avg.  (mem delta: -337kb) [4,2,2,2,2]
------------------------------------------------
Test Name            : Static Field Access (OGNL)
Expression           : @java.lang.Integer@MAX_VALUE
Iterations           : 50000
Interpreted Results  :
(OGNL)               : 2036.20ms avg.  (mem delta: -791kb) [2119,2039,2118,1946,1959]
Compiled Results     :
(OGNL Compiled)      : 10.00ms avg.  (mem delta: -580kb) [13,9,9,10,9]
------------------------------------------------
Test Name            : Inline Array Creation (MVEL)
Expression           : {'foo', 'bar'}
Iterations           : 50000
Interpreted Results  :
(MVEL)               : 229.40ms avg.  (mem delta: -430kb) [217,217,230,247,236]
Compiled Results     :
(MVEL Compiled)      : 4.00ms avg.  (mem delta: -504kb) [5,3,4,4,4]
------------------------------------------------
Test Name            : Inline Array Creation (OGNL)
Expression           : new String[] {'foo', 'bar'}
Iterations           : 50000
Interpreted Results  :
(OGNL)               : 1824.80ms avg.  (mem delta: -845kb) [1847,1802,1828,1816,1831]
Compiled Results     :
(OGNL Compiled)      : 62.20ms avg.  (mem delta: -449kb) [63,64,62,62,60]
------------------------------------------------
Test Name            : Collection Access + Method Call
Expression           : funMap['foo'].happy()
Iterations           : 50000
Interpreted Results  :
(OGNL)               : 1968.20ms avg.  (mem delta: -788kb) [1959,1953,1949,2021,1959]
(MVEL)               : 114.40ms avg.  (mem delta: -150kb) [116,114,116,112,114]
Compiled Results     :
(OGNL Compiled)      : 112.80ms avg.  (mem delta: -636kb) [116,111,113,112,112]
(MVEL Compiled)      : 2.20ms avg.  (mem delta: -18kb) [3,2,2,2,2]
------------------------------------------------
Test Name            : Boolean compare
Expression           : data == 'cat'
Iterations           : 50000
Interpreted Results  :
(OGNL)               : 1623.20ms avg.  (mem delta: -782kb) [1620,1629,1624,1620,1623]
(MVEL)               : 99.40ms avg.  (mem delta: -673kb) [107,98,99,96,97]
Compiled Results     :
(OGNL Compiled)      : 54.40ms avg.  (mem delta: -541kb) [54,54,57,53,54]
(MVEL Compiled)      : 15.60ms avg.  (mem delta: -747kb) [16,15,16,16,15]
------------------------------------------------
Test Name            : Object instantiation
Expression           : new String('Hello')
Iterations           : 50000
Interpreted Results  :
(OGNL)               : 1864.40ms avg.  (mem delta: -784kb) [1872,1867,1870,1855,1858]
(MVEL)               : 236.00ms avg.  (mem delta: -450kb) [238,234,236,236,236]
Compiled Results     :
(OGNL Compiled)      : 193.00ms avg.  (mem delta: -449kb) [196,191,191,196,191]
(MVEL Compiled)      : 2.80ms avg.  (mem delta: -507kb) [3,3,3,2,3]
------------------------------------------------
Test Name            : Method access
Expression           : readBack('this is a string')
Iterations           : 50000
Interpreted Results  :
(OGNL)               : 1791.80ms avg.  (mem delta: -786kb) [1771,1775,1781,1814,1818]
(MVEL)               : 107.60ms avg.  (mem delta: -506kb) [109,108,108,106,107]
Compiled Results     :
(OGNL Compiled)      : 70.60ms avg.  (mem delta: -598kb) [69,73,71,71,69]
(MVEL Compiled)      : 2.40ms avg.  (mem delta: -18kb) [2,3,2,2,3]
------------------------------------------------
Test Name            : Arithmetic
Expression           : 10 + 1 - 1
Iterations           : 50000
Interpreted Results  :
(OGNL)               : 1812.00ms avg.  (mem delta: -371kb) [1853,1821,1798,1792,1796]
(MVEL)               : 108.40ms avg.  (mem delta: -620kb) [112,108,109,107,106]
Compiled Results     :
(OGNL Compiled)      : 9.40ms avg.  (mem delta: -580kb) [10,9,10,9,9]
(MVEL Compiled)      : 0.60ms avg.  (mem delta: -18kb) [1,0,1,0,1]
------------------------------------------------
分享到:
评论
11 楼 cleverpig 2007-07-13  
哪位同学知道如何使用MVEL啊?我想把它用做Object发射工具,看了一下API,感觉没有什么头绪。
10 楼 yimlin 2007-04-11  
看起来不错!3.0的时候就在想要是drools可以支持ognl,那么可以用更为自然的模型设计了。现在更好了,不但支持了,还提高了效率!
9 楼 dada 2007-04-11  
eyejava 写道


3.1应该有很大的变动,还是等他的文档更新再用吧。因为drl的语法肯定有新的简单的写法,这是我期待的。
关于el,就是表达式语言,google应该有很多内容。
hibernate的问题是因为做了全表的查询,然后把所有记录丢入drools 的working memory中,因为做了set-one-to-many的关联 导致非常多的查询,主要性能瓶颈在这个地方。

简单写法倒是没有,就是实用了不少,或者说作者兑现了很多承诺。
po对象直接扔到memory中会出现什么好玩的问题吗?
我项目里面drools处理的是核心业务的东西,为了规避风险不敢直接把po往memory里面放。
我能想到的问题:
1. 该对象的一部分关系不需要初始化,drools会不会在访问对象的时候“不小心”初始化了?
2. 高范式的数据模型控制不住对象的数量规模和层次,从而影响规则引擎的效率。就我在选型的时候做的一些简单性能测试而言,对象越“平”,层次越少性能越好,性能差距在10倍-100倍。
8 楼 dada 2007-04-11  
我这里大约快了3ms,和一个规则集500ms+的耗时比较起来确实没有什么值得多提的。
7 楼 quaff 2007-04-10  
引用

(OGNL Compiled)      : 9.40ms avg.  (mem delta: -580kb) [10,9,10,9,9]
(MVEL Compiled)      : 0.60ms avg.  (mem delta: -18kb) [1,0,1,0,1]
------------------------------------------------

ognl和mvel怎么编译?
6 楼 sonic_yj 2007-04-10  
[quote="eyejava]
3.1应该有很大的变动,还是等他的文档更新再用吧。因为drl的语法肯定有新的简单的写法,这是我期待的。
关于el,就是表达式语言,google应该有很多内容。
hibernate的问题是因为做了全表的查询,然后把所有记录丢入drools 的working memory中,因为做了set-one-to-many的关联 导致非常多的查询,主要性能瓶颈在这个地方。


  文档我找到了一个,M1变化确实很大,我已经在用了,From , Collect 都很好用,暂时还不知道有什么其他新元素。至于你文章写的性能问题,我还是不太理解。。

  加载数据的问题我也有类似的困惑,因为可以用From,加载的数据到不一定全部加载,但是我也没确认到底一次加载效率高还是临时From加载效率高(目前我也就用到1w左右的数据量)我的感觉是透过Rule效率其实不低,不知道你涉及的数据量到底是什么样数量级的。至于one2many,基本上我个人不是太愿意用,感觉太逻辑了,写进去很难调整,而且这种东西Drools到底支持的如何,我还不太清楚,想听听你遇到的实际问题。

还有,似乎LHR里面无法直接使用From加载外部Fact的东东,不知道你遇到了么

   rule
     when
       li:ArrayList(size > 0) from collect( ds.search(hql) )
     then
       ....
   end
5 楼 eyejava 2007-04-10  
sonic_yj 写道



  正在用M1,不过不知道你说的这个东东什么东西,看起来应该是个很重大的调整,M1的文档又是一片空白,能说详细点么,帮助我这种刚入门的用户了解多一点。

   BTW,你提到了一个Hibernate问题。能具体点么,是第一次加载环境变量的时候慢,还是说用From在规则内加载外部Fact的时候的问题?谢谢


3.1应该有很大的变动,还是等他的文档更新再用吧。因为drl的语法肯定有新的简单的写法,这是我期待的。
关于el,就是表达式语言,google应该有很多内容。
hibernate的问题是因为做了全表的查询,然后把所有记录丢入drools 的working memory中,因为做了set-one-to-many的关联 导致非常多的查询,主要性能瓶颈在这个地方。
4 楼 sonic_yj 2007-04-10  
引用

Later I will also move templates from StringTemplate to MVEL, our template use is minimal so we don't really care what we use. MVEL is a needed dependency and already provides templates, so we might as well use that. The added bonus is that StringTemplate still relies on antlr-2.7.7, so I'll be able to remove 2 more dependencies.
按照这个本意仅仅是想减少两个包的依赖..丝毫不提mvel的优越性能啊,我倒看中这一点,目前项目中的规则运算巨慢,不过主要原因是hibernate查询导致的...




  正在用M1,不过不知道你说的这个东东什么东西,看起来应该是个很重大的调整,M1的文档又是一片空白,能说详细点么,帮助我这种刚入门的用户了解多一点。

   BTW,你提到了一个Hibernate问题。能具体点么,是第一次加载环境变量的时候慢,还是说用From在规则内加载外部Fact的时候的问题?谢谢
3 楼 Readonly 2007-04-10  
Mvel看起来不错,和ognl完全兼容,不知道为啥比ognl快那么多,下载下来研究一下...

差沙 写道
不知道这个对比权威不,另外考虑ww 能不能吧ognl换掉呢~~~

这个在去年的webwork mail list上有讨论过:
http://forums.opensymphony.com/thread.jspa?threadID=44645

从xwork的代码结构来看,偶们需要弄一个ValueStack interface以及一个factory来创建OgnlValueStack或者MevlValueStack,实现上不难。

而且JIRA上面已经有人提交patch了

http://jira.opensymphony.com/browse/XW-461

http://issues.apache.org/struts/browse/WW-1566

2 楼 差沙 2007-04-10  
不知道这个对比权威不,另外考虑ww 能不能吧ognl换掉呢~~~
1 楼 rainlife 2007-04-10  
从性能测试的结果来看,性能上面的优势太大了

相关推荐

    jboss rules 用户指南(中文)

    之前学习jboss rules 只能自己一点点的啃英文用户指南,后来终于找到了中文版的翻译版本,真是高兴,立即奉献给大家,让对规则引擎感兴趣的朋友也能一堵为快。 内容摘要:JBoss Rules 的前身是Codehaus的一个开源...

    JBoss Rules入门资料集锦

    本入门资料集锦涵盖了从基础到高级的多个方面,帮助初学者全面理解并掌握如何使用JBoss Rules进行规则管理。 首先,规则引擎是一种软件系统,它允许业务专家以易于理解和维护的规则语言定义业务规则,而不是让...

    jboss rules 中文用户指南

    jboss rules 中文用户指南,mht文件,共十章。

    jboss rules 用户指南

    ### jBoss Rules 用户指南知识点详解 #### 一、规则引擎概念及背景 ##### 1.1 什么是规则引擎 规则引擎是一种软件系统,它能够基于一组预定义的规则来处理数据,进而推导出结论或者执行特定的操作。规则引擎的...

    jboss rules 中文学习资料.chm

    jboss rules 中文学习资料.chm

    JBoss Rules 初学实例

    【JBoss Rules 初学实例】是针对Drools规则引擎的一个入门教程,适用于初次接触该框架的开发者。Drools是一款开源的业务规则管理系统,它允许开发人员以声明式的方式编写业务规则,使得复杂的逻辑处理变得更加简洁...

    Drools JBoss Rules 5 Developers Guide

    - **定义与背景**:Drools 是一个开源业务规则管理系统(Business Rule Management System, BRMS),它支持开发人员通过声明式编程来实现业务逻辑。Drools 由 JBoss 维护,并作为 Red Hat JBoss BRMS 的一部分。 - *...

    jboss7.1+ejb3.1建立第一个Ejb项目

    本篇文章将指导你如何使用JBoss7.1和EJB3.1在Eclipse3.7环境中创建你的第一个EJB项目。EJB(Enterprise JavaBeans)是一种Java平台上的组件模型,用于构建可扩展的、可靠的、安全的企业级应用。JBoss是Red Hat公司...

    EJB3.1与JBoss7.1.1在eclipse的实现

    标题《EJB3.1与JBoss7.1.1在eclipse的实现》意味着本文档将介绍如何使用EJB3.1标准在JBoss应用服务器7.1.1版本上进行企业级Java Bean(EJB)的开发,并通过Eclipse集成开发环境进行部署和测试。EJB3.1是一种用于简化...

    JBOSSRULES使用文档

    JBOSSRULES使用文档

    Drools JBoss Rules 5.X Developer's Guide

    Drools JBoss Rules是JBoss企业中间件产品套件的一部分,它是一个基于Java平台的业务规则引擎(Business Rules Engine),它允许业务逻辑从业务应用程序中分离出来,并以一种易于管理和维护的方式呈现。Drools JBoss...

    Drools JBoss Rules 5.0 Developer's Guide

    ### Drools JBoss Rules 5.0 Developer's Guide #### 概述 《Drools JBoss Rules 5.0 Developer's Guide》是一本专为希望利用Drools平台开发基于规则的业务逻辑的开发者而编写的指南。本书由Michal Bali撰写,于...

    jboss rules 最新09年英文原版教材

    《JBoss Drools Business Rules》是一本由 Paul Browne 编写的书籍,首次出版于2009年,该书旨在介绍如何利用 JBoss Drools 捕获、自动化及重用业务流程。本书版权属于 Packt Publishing,并在 Birmingham 和 Mumbai...

    jboss7.1 linux版本

    JBoss AS 7.1.0.Final是在Linux环境下运行的一款开源Java应用服务器,由Red Hat公司维护。这个版本发布于2012年,它引入了许多改进和新特性,旨在提供更快的启动速度、更高的性能以及更好的模块化。在这个环境中,...

    jboss的性能优化

    在使用JBoss 3.2.1版本部署Web应用的过程中,遇到了一个长期存在的问题——内存占用过高,具体表现为即使对于规模不大、流量不多的站点,系统也经常需要消耗超过500MB的虚拟内存(即swap空间)。这个问题不仅增加了...

    规则引擎drools-jboss rules

    规则引擎 Drools-JBoss Rules 是一个强大的规则引擎,可以应用于各种领域,帮助企业更顺利地引入规则引擎,并提高规则引擎的附加价值。但是,它需要复杂的实现和维护,需要大量的计算资源,需要高级的技术人才。

Global site tag (gtag.js) - Google Analytics