`
yerk
  • 浏览: 21509 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一次JPA性能优化历险

JPA 
阅读更多
最近的项目中使用JPA实现批量数据导入数据库。
既然是批量,那么必然要考虑性能问题了,所以就有了这篇博文。
首先,介绍下使用的API:
1.javax.persistence.EntityManager.clear()
在这次优化中,使用的关键,用于清空缓存。
2.javax.persistence.EntityManager.flush()
用于将缓存中的数据回写数据库。
3.javax.persistence.EntityManager.persist(Object)
用于将新建实体放入缓存。

一般新增一条记录会使用如下语句:
 Record record = new Record();
...
record.setXXX(...);
em.persist(record);
em.fulsh();


以上写法在非批量处理时,没有多大性能问题,但是当在循环中调用就有很大的性能问题了。
  • 循环次数    耗时比例数
  • 1000         30
  • 500          7
  • 100          1


以上数据只是大概比例,但是可以看出,循环次数与耗时不成正比例,即非线性增长。

刚看到这些数据时,猜测是循环中fulsh()调用频繁,所以性能低下。

于是,将fulsh()放到循环外,性能略有好转,但是耗时仍然是非线性增长。

能不能是缓存的问题?

试试在循环中每次调用em.clear(),终于解决了非线性增长耗时问题。
 Record record = new Record();
...
record.setXXX(...);
em.persist(record);
em.fulsh();
em.clear();

结论:循环次数高-->数据量大-->缓存负载大。
使用缓存时,要具体问题具体分析。
3
0
分享到:
评论
1 楼 amcucn 2009-02-18  
不错,又学一招!

相关推荐

    jpa性能优化ppt

    2. **使用Join Fetches**:在某些运行时使用案例中,可以使用Join Fetches覆盖配置为懒加载的关系,以急切加载数据,避免N+1查询问题,即一次查询主实体,然后对每个关联实体进行额外查询,这会严重影响性能。...

    jpa例子jpajpa

    **Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的对象-关系映射(ORM)。它提供了一种方式,让开发者可以用面向对象的编程模型来操作数据库,而无需直接编写SQL语句。JPA允许你在...

    JPA源文件/jpa学习

    JPA 2.0引入了许多增强功能,比如支持@OneToMany和@ManyToMany关系的双向映射,新增了@Temporal注解以处理日期和时间,增强了Criteria API,引入了@SecondaryTable注解以支持多表映射,还引入了Entity Graph来优化...

    JPA入门(一)

    总结,JPA是Java开发中处理数据库的强大工具,通过面向对象的方式简化了数据库操作,提供了灵活的查询机制,并且具备事务管理和性能优化功能。初学者应掌握其核心概念和常用API,以便更好地进行数据库操作。在实际...

    04_JPA详解_第一个JPA实例与JPA主键生成策略.zip

    4. **实体管理工厂(EntityManagerFactory)**: 它是创建EntityManager实例的工厂,通常在应用程序启动时创建一次,然后在整个应用生命周期中重复使用。 ### 第一个JPA实例 创建第一个JPA实例通常涉及以下步骤: ...

    Pro JPA2 精通JPA2

    4. **缓存机制**:JPA提供了一级缓存和二级缓存,分别用于缓存实体对象和查询结果,提高应用程序的性能。 5. **事件监听器**:允许在实体生命周期的特定点触发自定义代码,例如,在实体保存前进行预处理或在实体删除...

    JPA (一)

    **Java 持久化 API(JPA)详解(一)** Java 持久化 API(Java Persistence API),简称 JPA,是 Java 平台上的一个标准,用于管理关系数据库中的数据。JPA 提供了一种面向对象的方式来操作数据库,使得开发人员...

    JPA中文解释,JPA的API

    8. 性能优化技巧,如批处理、懒加载和缓存策略。 总之,JPA是Java开发中处理数据库的强大工具,通过学习和掌握其API和注解的使用,开发者可以更加高效地进行数据持久化操作,同时减少对底层数据库知识的依赖。结合...

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

    **Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的数据。它为Java开发者提供了一种对象关系映射(ORM)机制,将业务对象与数据库表进行映射,使得开发者可以使用面向对象的方式来操作...

    其实spring data jpa比mybatis更好用.zip_JPA mybatis

    3. **开销**:JPA可能会引入额外的性能开销,而MyBatis更接近数据库,可能有较好的性能表现。 4. **维护**:Spring Data JPA的Repository模式降低了代码的耦合度,而MyBatis的DAO层需要手动维护。 综上所述,Spring...

    jpa技术资料包含文档以及ppt

    Hibernate是JPA的一个实现,提供了丰富的功能和性能优化。文档可能会讨论如何在项目中同时使用JPA规范和Hibernate的特有功能,比如HQL(Hibernate Query Language)与JPQL的异同,以及如何配置和使用Hibernate的特定...

    Spring Data JPA中文文档[1.4.3]_springdatajpa_erlang_waitxpf_

    **Spring Data JPA** 是一个基于 **Java** 的开源...文档中可能还会涵盖错误处理、性能优化以及与其他 Spring 模块的协作等内容。在学习过程中,结合实际编程实践,能更好地理解和掌握 Spring Data JPA 的强大功能。

    JPA一对一关系实例配置

    在Java世界中,Java Persistence API (JPA) 是一种用于管理关系数据库的框架,它使得对象-关系映射(ORM)更加便捷。本实例将详细探讨JPA中的一对一(OneToOne)关系配置,以及如何在实际项目中实现。 一对一关系在...

    JPA大全之经典全集

    JPA的官方文档详细介绍了JPA的规范和实现,包括其核心概念、配置、实体管理、查询语言、事务管理以及性能优化等方面。文档通常分为两部分:JSR(Java Specification Requests)文档和API文档。JSR文档定义了JPA的...

    jpa

    3. **懒加载和即时加载**:通过懒加载机制,可以优化性能,仅在需要时加载关联数据。 4. **级联操作**:允许在操作一个实体时,同时影响到与其关联的其他实体。 5. **多态性**:支持子类继承父类实体,并在数据库中...

    springboot + jpa 批量存储示例

    例如,我们有一个用户列表,想要一次性保存到数据库: ```java List<User> userList = ... // 初始化用户列表 userRepository.saveAll(userList); ``` 在实际应用中,为了提高性能,可以分批保存大数据集,避免内存...

    11_传智播客JPA详解_JPA中的一对多延迟加载与关系维护

    一、JPA一对多关系 在数据库中,一对多关系意味着一个实体可以与多个其他实体关联。例如,一个学生可以属于多个班级(多对一),而一个班级可以包含多个学生(一对多)。在JPA中,我们通过在实体类上使用`@...

    JPA Specification

    - **批量操作**:JPA 2.0增加了对批量操作的支持,允许一次性执行多条更新或删除语句。 - **自定义转换器**:通过自定义转换器可以实现更复杂的数据类型映射,如日期时间类型的处理等。 #### 三、JPA 2.0规范的应用...

    Spring Data JPA的优点和难点.pdf

    Spring Data JPA是Spring生态中的一个强大ORM框架,它极大地提高了Java开发者在处理数据库操作时的效率。Spring Data JPA的主要优点在于其高度的开发效率、成熟的语法结构以及与Spring框架的紧密集成。 1. **开发...

    jpa环境jar包

    2. **Hibernate JPA实现**:Hibernate是JPA的一个流行实现,提供了更丰富的功能和性能优化。`hibernate-entitymanager` jar包包含了Hibernate对JPA规范的具体实现,包括实体管理器工厂、实体管理和查询服务。同时,`...

Global site tag (gtag.js) - Google Analytics