`
simen_net
  • 浏览: 306283 次
  • 性别: 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批注

    同时,OpenJPA可以与Spring框架和其他开源项目很好地集成,适合大型企业级应用。 **4. JPA批注** JPA批注是定义实体类和其属性与数据库表之间映射的关键部分。常用的批注包括: - `@Entity`:标记一个Java类作为...

    JPA和Hibernate的关系

    1. **标准与实现**:JPA是一种标准,而Hibernate是一种实现了这一标准的框架。这意味着任何符合JPA规范的应用都可以无缝地与Hibernate集成。 2. **功能子集**:从功能的角度来看,JPA可以说是Hibernate的一部分...

    openjpa jar

    9. **集成框架**:OpenJPA可与Spring、Hibernate等流行框架无缝集成,进一步丰富了开发者的工具箱。 10. **社区支持**:作为Apache项目,OpenJPA拥有活跃的社区,提供文档、示例、论坛支持以及持续的版本更新和维护...

    Spring和openJPA集成

    将Spring与OpenJPA集成,可以让我们充分利用Spring的依赖注入、事务管理等特性,同时利用OpenJPA进行数据库操作,实现高效且灵活的数据持久化。 Spring框架提供了多种数据访问接口,如JdbcTemplate、JPA、Hibernate...

    Apache OpenJPA是Jakarta Persistence API 3.0规范的实现

    Apache OpenJPA,全称Open Java Persistence API,是Apache软件基金会的一个开源项目,它实现了Java Persistence API(JPA)3.0规范。JPA是一种Java平台上的标准,用于管理关系数据库中的对象,使得开发者能够在Java...

    5.Hibernate 05 Hibernate结合JPA1

    JPA支持多种ORM实现,包括Hibernate、TopLink、OpenJPA等。 **2. JPA与Hibernate的关系** JPA是一个规范,而Hibernate是JPA的一个实现。这意味着你可以使用JPA的API来编写代码,而具体的数据访问逻辑则由Hibernate...

    jpa例子jpajpa

    OpenJPA是JPA的一个开源实现,它提供了完整的JPA功能,包括持久化、查询、事务管理等。你可以通过阅读源代码来深入理解JPA的工作原理,以及OpenJPA是如何实现这些功能的。 学习和掌握JPA对于开发Java企业级应用至关...

    spring-boot-openjpa-postgres

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

    Spring-Data-JPA-using-Hibernate:使用Hibernate eclipse项目的Spring Data JPA

    Spring Data JPA是Spring框架的一个模块,它简化了在Java应用程序中使用JPA(Java Persistence API)的工作。...同时,这种方式也适用于其他JPA提供商,如OpenJPA或EclipseLink,只需更换相应的配置即可。

    JPA操作手册,包括EJB3.0

    本文旨在详细介绍JPA的核心概念、应用场景以及如何将原有的Hibernate应用迁移到遵循JPA规范的OpenJPA框架中。 #### 二、JPA与EJB3.0简介 **JPA** 是一种标准化的数据持久层技术,它为Java平台提供了一套统一的API...

    JPA笔记

    在OpenJPA配置中,`&lt;provider&gt;`元素指定了OpenJPA作为持久化提供者,`&lt;class&gt;`元素列举了参与持久化的实体类,`openjpa.jdbc.SynchronizeMappings`和`openjpa.ConnectionURL`等属性则是OpenJPA特有的配置,用于同步...

    尚硅谷 jpa

    - **JPA 实现者**:除了 Hibernate 外,还有其他几个实现 JPA 的工具,例如 TopLink 和 OpenJPA。 #### 三、JPA 的优势 - **标准化**:由于 JPA 提供了统一的 API,这意味着基于 JPA 开发的应用可以在不同的 JPA ...

    03_JPA详解_搭建JPA开发环境和全局事务介绍.zip

    2. **添加依赖**: 在Maven或Gradle项目中,需要引入JPA相关的依赖,比如Spring Data JPA、Hibernate等实现库。在Maven的pom.xml文件中,会包含如下依赖: ```xml &lt;groupId&gt;org.springframework.boot ...

    JPA整理文档

    - **JPA供应商**:目前市场上有多家供应商提供了JPA的实现,例如**Hibernate**、**TopLink**和**OpenJPA**等。 ### JPA的技术组成 #### 四、JPA的核心技术组成部分 1. **ORM映射元数据**:JPA支持两种元数据形式...

    EJB_JPA数据库持久层开发详解

    常见的JPA实现框架包括Hibernate、OpenJPA、TopLink等。其中,Hibernate是最流行的选择,它不仅提供了丰富的功能,还具有高度的灵活性和性能。 #### 对象关系映射(ORM) **对象关系映射**是一种编程技术,用于将...

    springdatajpa.pdf

    Hibernate之外,还有其他实现了JPA规范的框架,比如OpenJPA、TopLink等。开发者可以根据项目需求选择不同的JPA实现,而SpringDataJPA就是在此之上提供了一层抽象,即Repository层的实现,进一步简化了持久层的代码...

Global site tag (gtag.js) - Google Analytics