Hibernate是对JDBC的轻量级封装,所以在不少状况下Hibernate的性能比直接使用JDBC存取数据库要低。然而,经过正确的方法和策略,在使用Hibernate的时候仍是能够很是接近直接使用JDBC时的效率的,而且,在有些状况下还有可能高于使用JDBC时的执行效率。
在进行Hibernate性能优化时,须要从如下几个方面进行考虑:
数据库设计调整。
HQL优化。
API的正确使用(如根据不一样的业务类型选用不一样的集合及查询API)。
主配置参数(日志、查询缓存、fetch_size、batch_size等)。
映射文件优化(ID生成策略、二级缓存、延迟加载、关联优化)。
一级缓存的管理。
针对二级缓存,还有许多特有的策略。
事务控制策略。
数据的查询性能每每是影响一个应用系统性能的主要因素。对查询性能的影响会涉及到系统软件开发的各个阶段,例如,良好的设计、正确的查询方法、适当的缓存都有利于系统性能的提高。
系统性能的提高设计到系统中的各个方面,是一个相互平衡的过程,须要在应用的各个阶段都要考虑。而且在开发、运行的过程当中要不断地调整和优化才能逐步提高系统的性能。
设计阶段的考虑问题
一个良好的数据库结构有利于系统性能的提高。这里所说的良好结构的数据库并不单纯是指知足数据库设计范式的数据库结构。这是由于,按照数据库范式所设计的数据库只能说在结构上是最优的,没有冗余数据等问题,但在生产过程当中并不必定能得到最佳的性能。有时候适当地增长一些数据的冗余虽然增长了数据维护的难度,但能够极大地简化业务的查询,提升数据检索的效率。
在使用Java访问数据库的时候,还存在另一个问题,就是面向对象的Java语言与关系型数据库之间的矛盾。在这二者之间必然要涉及到一个相互转化的问题,对于这个问题是否可以正确的处理也是影响系统性能的一个重要因素。
综合以上提出的各类问题,在数据库设计阶段要综合考虑如下三个方面的因素。
Java建模
在创建Java对象模型的时候,要考虑数据库持久化的方便性,所创建的Java对象模型应该能够很容易地被数据所存储,而且数据库中也是越简单越好。
数据库结构
在设计数据库结构的时候也要考虑到是否能够很容易地用Java对象去表示。这里并非简单的一个表对应一个对象的直接转换,更重要的是转换后的Java对象应该可以描述出数据间的关系。
因此在设计阶段,对于Java对象和数据库结构要进行综合考虑,也就是能够从两个方向进行考虑,毕竟二者之间不是一个时代的产物,设计的结果应该在二者之间达到一个平衡,虽然不能每一方都达到最优,但也不能形成有一方结构不好的状况。就像装水的木桶,最矮的板子决定水桶的容量。
业务需求
前面两个因素都是纯技术方面的考虑,在设计的过程当中,更重要的是要紧扣业务需求。这是由于任何的软件系统都是以业务为中心的,那么对于系统的设计也不例外,在设计的阶段就应该考虑业务实现的方便性以及执行的效率。一个良好的结构设计不但使业务功能的实现变得很是容易而且能够避免不少复杂的操做,还能够达到提高系统性能的目的。
设计阶段是整个应用系统开发中的根基,其对软件的影响仅次于对系统需求的把握。因此在设计阶段应该对整个软件系统有一个总体的考虑,这里所说的具体设计也只是设计阶段中的不多的一部分,综合考虑多方面的因素才能达到更佳的性能。