近日为是否在项目中使用Hibernate进行大数据量的性能测试,有一些总结,
1) 在处理大数据量时,会有大量的数据缓冲保存在Session的一级缓存中,这缓存大太时会严重显示性能,所以在使用Hibernate处理大数据量的,可以使用session.clear()或者session. Evict(Object) 在处理过程中,清除全部的缓存或者清除某个对象。
2) 对大数据量查询时,慎用list()或者iterator()返回查询结果,
1. 使用List()返回结果时,Hibernate会所有查询结果初始化为持久化对象,结果集较大时,会占用很多的处理时间。
2. 而使用iterator()返回结果时,在每次调用iterator.next()返回对象并使用对象时,Hibernate才调用查询将对应的对象初始化,对于大数据量时,每调用一次查询都会花费较多的时间。当结果集较大,但是含有较大量相同的数据,或者结果集不是全部都会使用时,使用iterator()才有优势。
3. 对于大数据量,使用qry.scroll()可以得到较好的处理速度以及性能。而且直接对结果集向前向后滚动。
3) 对于关联操作,Hibernate虽然可以表达复杂的数据关系,但请慎用,使数据关系较为简单时会得到较好的效率,特别是较深层次的关联时,性能会很差。
4) 对含有关联的PO(持久化对象)时,若default-cascade="all"或者 “save-update”,新增PO时,请注意对PO中的集合的赋值操作,因为有可能使得多执行一次update操作。
5) 在一对多、多对一的关系中,使用延迟加载机制,会使不少的对象在使用时方会初始化,这样可使得节省内存空间以及减少数据库的负荷,而且若PO中的集合没有被使用时,就可减少互数据库的交互从而减少处理时间。
6) 对于大数据量新增、修改、删除操作或者是对大数据量的查询,与数据库的交互次数是决定处理时间的最重要因素,减少交互的次数是提升效率的最好途径,所以在开发过程中,请将show_sql设置为true,深入了解Hibernate的处理过程,尝试不同的方式,可以使得效率提升。
7) Hibernate是以JDBC为基础,但是Hibernate是对JDBC的优化,其中使用Hibernate的缓冲机制会使性能提升,如使用二级缓存以及查询缓存,若命中率较高明,性能会是到大幅提升。
8) Hibernate可以通过设置hibernate.jdbc.fetch_size,hibernate.jdbc.batch_size等属性,对Hibernate进行优化。
分享到:
相关推荐
通过以上步骤,我们可以明显地感受到Hibernate Tools带来的便利性,它极大地提高了开发效率,减少了手动编码的工作量,使得开发者可以更专注于业务逻辑的实现。理解并熟练掌握这个工具,对于提升Java开发中的生产力...
在Java Web开发领域,"三大框架"通常指的是Struts、Spring和Hibernate,这三者合称为SSH。它们各自负责不同的职责,共同构建了一个强大的企业级应用开发解决方案。 1. **Struts**:Struts是Apache软件基金会下的一...
总的来说,Liferay IDE插件为Eclipse用户提供了强大的Liferay开发支持,无论是在项目初始化、编码过程,还是在调试和部署阶段,都能感受到其带来的便利。它不仅简化了Liferay开发的复杂性,而且通过与Eclipse的深度...
《Spring Framework 4.1.1....无论是在控制层、数据访问层,还是在测试和安全层面,都能感受到Spring Framework所带来的强大支持。对于想要深入理解和掌握Spring的开发者来说,这个版本无疑是学习和实践的优秀选择。
Spring 框架是Java开发领域中的一个核心框架,它为构建可维护、高性能和松耦合的应用程序提供了全面的解决方案。Spring的核心特性包括依赖注入(Dependency Injection, DI)、面向切面编程(Aspect-Oriented ...
在Spring框架中,还有许多其他的模块,如数据访问/集成(包括JDBC、ORM支持如Hibernate)、Web层的支持(如MVC框架)、任务调度、缓存等。这些模块的设计和实现都体现了Spring的灵活性和可扩展性,允许开发者根据...
- **Spring框架**:Spring是企业级Java应用的核心框架,它提供了依赖注入、AOP(面向切面编程)、数据访问、事务管理等全面的解决方案,鼓励开发者使用接口而非具体类,增强了代码的可测试性和可维护性。...
##### Hibernate五大核心(类/接口)简述 - **SessionFactory**:创建Session的工厂。 - **Session**:与数据库交互的接口。 - **Transaction**:事务管理接口。 - **Criteria**:查询标准。 - **Query**:执行HQL或...
这样做的好处是增强了代码的可测试性和可维护性。在描述中提到的"IOC",即Inversion of Control,就是依赖注入的另一种表述方式,控制权从对象内部转移到了外部容器。 **面向切面编程(Aspect-Oriented Programming...
3. **丰富的库支持**:Java拥有庞大的开源库资源,如Spring框架、Hibernate ORM等,这些库可以极大地简化开发过程,提高"InstantEat"的功能性和用户体验。 4. **并发处理**:对于处理大量用户的即时需求,Java的多...