`
simen_net
  • 浏览: 300939 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

OpenJPA与Hibernate实现JPA的性能测试

阅读更多

项目移植到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
分享到:
评论
3 楼 simen_net 2010-11-15  
C_J 写道
你插入和查询的操作是不是在同一个事务之中?
有没有发现,如果把插入时间和查询时间加起来,再看,其实都是差不多的。

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


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

最后的结论应该还是可以接受的,OpenJPA性能并不像http://www.iteye.com/topic/777470中那样写的“令人发指”
2 楼 C_J 2010-11-14  
你插入和查询的操作是不是在同一个事务之中?
有没有发现,如果把插入时间和查询时间加起来,再看,其实都是差不多的。

你说说你的事务是如何写的么?
1 楼 simen_net 2010-11-13  
对上面的测试结果仍然觉得有问题,所以做了另外一个测试:

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

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

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

结果把这个时间累加到了查询时间中,由于没有仔细去阅读源代码,只能做出这样的估计

相关推荐

    JPA教程,包括TOPLink JPA,Hibernate JPA,Open Jpa,jpa批注

    包括TOPLink JPA,Hibernate JPA,Open Jpa,jpa批注

    插入式持久性提供者的承诺:Kodo、OpenJPA和Hibernate

    邮箱中有一个bug报告,它报告了在Weblogic server环境中的Hibernate和Kodo之间切换JPA持久性提供者时的一个问题。在再现这个bug的过程中,包括如何在Weblogic Server 10.0中安装Hibernate,以及如何使用一个特定的...

    spring-boot-openjpa-postgres

    该应用程序的主要目的是将JPA实现从Hibernate模式替换为openjpa。 在此示例中,postgres是选择的数据库,但可以轻松地由任何其他数据库(例如,MySql,Oracle,H2等)替换。加载时间编织已激活通过对源实体类进行...

    spring-jpa-wicket-bootstrap:使用 Spring、JPA、Hibernate、Wicket 和 Bootstrap 的 J2EE Web 模板。 在 Tomcat 和 Postgres DB 上测试

    这是一个工作模板项目,它展示了一个示例多层 J2EE Web 应用程序,其中包含Apache Wicket 、 Spring IoC 、 JPA/Hibernate集成和基于Bootstrap的前端。 它演示了MvC 、 SoC 、 IoC 、 DAO 、 Service layer和Open ...

    用JPA时需要的jar包

    JPA由EJB 3.0软件专家组开发,作为JSR-220实现的一部分。但它不囿于EJB 3.0,你可以在Web应用、甚至桌面应用中使用。JPA的宗旨是为POJO提供持久化...目前Hibernate 3.2、TopLink 10.1.3以及OpenJPA都提供了JPA的实现。

    ejb3.0 jpa

    JPA(Java Persistence API)作为Java EE 5.0平台标准的ORM规范,将得到所有Java EE服务器的支持。Sun这次吸取了之前EJB规范惨痛失败的经历,在充分...目前Hibernate 3.2、TopLink 10.1.3以及OpenJpa都提供了JPA的实现。

    JPA+批注参考.pdf

    JPA(java persistence api)是JavaEE5.0平台的标准的ORM规范。而Hibernate、TopLink和OpenJPA为JPA的一种实现方式。 本文档主要是对其注解的详细说明。

    lb-karaf-examples-jpa

    lb-karaf-examples-jpa 模块: jpa-batoojpa 数据核 jpa-eclipselink jpa-Hibernate jpa-hibernate-noaries jpa-openjpa 参考:

    使用 Spring Data JPA 简化 JPA 开发 sample code

    这是 《使用 Spring Data JPA 简化 JPA 开发》的sample code。原文在 http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa/index.html

    Hibernate Recipes(Apress,2ed,2015)

    2nd Edition contains a collection of code recipes and templates for learning and building Hibernate solutions for you and your clients, including how to work with the Spring Framework and the JPA....

    Beginning.Hibernate.For.Hibernate.5.4th.Edition

    Beginning Hibernate is ideal if you’re experienced in Java with databases (the traditional, or connected, approach), but new to open-source, lightweight Hibernate. The book keeps its focus on ...

    JPA-eclipselink-project:使用 EclipseLink 实现的 JPA 项目示例

    这个 API 有不同的实现:EclipseLik、Hibernate、TopLink、OpenJPA、...... API 提供类似于 SQL 的查询语言,但使用对象而不是数据库中的关系实体。 Java Persistence API 基于实体,这些实体是简单的带注释的 POJO...

    Spring.Persistence.with.Hibernate.2nd.Edition.1484202694

    Learn how to use the core Hibernate APIs and tools as part of the Spring Framework. This book illustrates how these two frameworks can be best utilized. Other persistence solutions available in Spring...

    针对JPA的活动记录模式ActiveJPA.zip

    ActiveJPA使用到了JPA规范,因此所有JPA的ORM实现(Hibernate、EclipseLink、OpenJPA等)都可以与ActiveJPA协同使用。 示例代码: // Get order by id Order order = Order.findById(12345L); // Get all...

    hibernate ogm

    Hibernate Object/Grid Mapper (OGM) aims at providing Java Persistence (JPA) support for NoSQL solutions. It reuses Hibernate Core's engine but persists entities into a NoSQL data store instead of a ...

    CustomerSecurityManagementSystem:我的第一个 strutsspringopenjpa|hibernate 项目

    Drools6 #####Resource Layer DAO:默认:Hibernate + ehcache,可选:OpenJPA 数据库: MySQL如何设置ENV maven3.0+安装在你的环境中git安装在你的环境中mysql 已安装,在 UTF8 中工作,并使用 root 用户和空密码...

    最新myeclipse10中文版下载地址与汉化2013、注册码、破解包(汉化包2013更新)

    MyEclipse 10 使用高级桌面和Web开发技术,包括 HTML5 和 Java EE 6,支持 JPA 2.0、JSF 2.0 、Eclipselink 2.1 以及 OpenJPA 2.0. 而对 IBM WebSphere 用户来说,MyEclipse Blue 支持最新版本的 WebSphere Portal ...

    querydsl-open:QueryDSL示例

    看: querydsl-jpa:使用Spring MVC和Spring Boot开发的Java Web应用程序,演示了如何使用QueryDSL和JPA / Hibernate。 使用的数据库是HSQLDB。 前端是使用JQuery和Foundation开发的。 querydsl-spring-data:使用...

    persistencia-java:带有Java持久性示例的项目

    在JAVA中的持久性[JPA实现比较:Hibernate,Toplink Essentials,Openjpa,Eclipselink]( )

    RESTfulExampleJAX-RS

    RESTfulExampleJAX-RS 使用各种Java EE技术创建RESTful Web服务的示例项目。 生产服务已部署到GlassFish 4.1,并使用与MySQL数据库关联的... 备用包括Hibernate , OpenJPA等。 EclipseLink MOXy:通过jaxb.properti

Global site tag (gtag.js) - Google Analytics