论坛首页 Java企业应用论坛

OpenJPA与Hibernate实现JPA的性能测试

浏览 3960 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-11-12  

项目移植到OpenJPA后一直使用都很不错,最近看了http://www.iteye.com/topic/777470受到一些启发,基于自己的项目也做了一下测试。

 

1、测试代码:

    long t1 = System.currentTimeMillis();
    qtServ.test();
    long t2 = System.currentTimeMillis();
    System.out.println("总耗时:" + String.valueOf(t2 - t1));
  public void test() {
    long t1, t2;
    t1 = System.currentTimeMillis();
    for (int i = 0; i < 10000; i++) {
      TXx txx = new TXx();
      txx.setXxMc("测试名称" + i);
      txx.setXxDm("测试代码" + i);
      txx.setXxLx("测试类型" + i);
      txx.setXxXh(i);
      txxDAO.save(txx);
    }
    t2 = System.currentTimeMillis();
    System.out.println("插入10000条记录耗时:" + String.valueOf(t2 - t1));

    t1 = System.currentTimeMillis();
    List<TXx> ls = txxDAO.findAll();
    t2 = System.currentTimeMillis();
    System.out.println("查询10000条记录耗时:" + String.valueOf(t2 - t1));

    t1 = System.currentTimeMillis();
    List<TXx> ls2 = txxDAO.findAll();
    t2 = System.currentTimeMillis();
    System.out.println("重复查询10000条记录耗时:" + String.valueOf(t2 - t1));

    t1 = System.currentTimeMillis();
    for (TXx txx : ls) {
      TXx t = txxDAO.getByID(txx.getXxId());
    }
    t2 = System.currentTimeMillis();
    System.out.println("逐个查询10000条记录耗时:" + String.valueOf(t2 - t1));

    t1 = System.currentTimeMillis();
    for (TXx txx : ls) {
      txx.setXxMc(txx.getXxMc() + "修改后");
      txxDAO.update(txx);
    }
    t2 = System.currentTimeMillis();
    System.out.println("修改10000条记录耗时:" + String.valueOf(t2 - t1));

    t1 = System.currentTimeMillis();
    for (TXx txx : ls) {
      txxDAO.delete(txx);
    }
    t2 = System.currentTimeMillis();
    System.out.println("逐条删除10000条记录耗时:" + String.valueOf(t2 - t1));
  }

 

项目使用JPA2.0,除只是在JPA的实现中使用不同的包,其他完全相同

由于缓存的配置项目不同,不太好做对比,因此本次测试只配置了基础的JPA项目即连接地址、帐号、密码。

项目在Eclipse中以debug模式运行

由于OpenJPA使用了增强,这里用的是在tomcat运行时加入org.springframework.instrument-3.0.3.RELEASE.jar

 

测试方法,导入项目立刻debug,待tomcat启动完成即开始连续5次测试,将测试结果分别记录

 

测试结果


分析对比结果



 结论:

这个也太协会了,OpenJPA的插入执行效率和Hibernate的查询执行效率也……

个人觉得是不是我的测试构造的不完善,为什么会有这么大的反差,但是多少也说明了OpenJPA执行效率在2.0后有了较高的提升。在项目中开启缓存后从使用情况来看还是不错的。当然我还是觉得这个测试不完善,请高手帮忙解惑……

 

  • 大小: 10.7 KB
  • 大小: 4.4 KB
   发表时间:2010-11-13  
对上面的测试结果仍然觉得有问题,所以做了另外一个测试:

不进行记录的添加和删除动作,只进行查询操作

这个时候OpenJPA的查询时间大大减少,由于的测试过程使用了事务

所以个人估计是OpenJPA的添加操作并没有立刻执行到数据库,而是有一定时间的延迟。

结果把这个时间累加到了查询时间中,由于没有仔细去阅读源代码,只能做出这样的估计
0 请登录后投票
   发表时间:2010-11-14   最后修改:2010-11-14
你插入和查询的操作是不是在同一个事务之中?
有没有发现,如果把插入时间和查询时间加起来,再看,其实都是差不多的。

你说说你的事务是如何写的么?
0 请登录后投票
   发表时间:2010-11-15   最后修改:2010-11-15
C_J 写道
你插入和查询的操作是不是在同一个事务之中?
有没有发现,如果把插入时间和查询时间加起来,再看,其实都是差不多的。

你说说你的事务是如何写的么?


我也是这样认为的,我使用的是Spring进行的事务管理,所以从整体的运行速度来比较就更客观一些。

最后的结论应该还是可以接受的,OpenJPA性能并不像http://www.iteye.com/topic/777470中那样写的“令人发指”
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics