当前位置:  开发笔记 > 编程语言 > 正文

ORM解决方案(JPA; Hibernate)与JDBC

如何解决《ORM解决方案(JPA;Hibernate)与JDBC》经验,为你挑选了4个好方法。

我需要能够在内存中的HSQL数据库中以每5秒至少8000个对象的一致速率插入/更新对象.

我在Spring/Hibernate/JPA和纯JDBC之间做了一些比较性能测试.我发现使用HSQL在性能方面存在显着差异.使用Spring/Hib/JPA,我可以在5秒内插入3000-4000的1.5 KB对象(具有One-Many和Many-Many关系),而直接使用JDBC调用我可以插入10,000-12,000个相同的对象.

我无法弄清楚为什么会出现如此巨大的差异.我已经调整了Spring/Hib/JPA设置,试图在没有运气的情况下接近性能.我想将Spring/Hib/JPA用于未来目的,可扩展性,并且因为外键关系(一对多和多对)难以手工维护; 但性能要求似乎指向使用纯JDBC.

有什么想法会出现这么大的差异吗?



1> Jack Leow..:

我们在批处理模式下比较Hibernate和JDBC的相似经验(Statement#executeBatch()).基本上,似乎Hibernate在批量操作方面做得不好.在我们的例子中,Hibernate实现在我们的生产硬件上足够快.

您可能想要做的是将数据库调用包装在DAO中,为您的应用程序提供访问数据的一致方式.在方便的情况下使用Hibernate实现DAO,在性能要求需要的JDBC中实现DAO.



2> Vladimir Dyu..:

至少,你需要在Hibernate中进行批量插入:http: //www.hibernate.org/hib_docs/reference/en/html/batch.html节省了大量的往返时间.

而且,正如Justice所说,Hib的主要目标不是计算机性能,而是开发人员的表现.话虽如此,通常可以实现与JDBC结果相当(不等于,但不是更差).



3> Sean Carpent..:

Hibernate维护一个对象的第一级缓存,用于脏检查以及充当工作单元和身份映射.这增加了开销,特别是在批量操作中.对于批量操作,您可能希望调查不保持此状态的StatelessSessions.



4> darpet..:

永远不要将一种技术用于所有问题.根据问题决定使用什么技术.当然jpa或hibernate比jdbc慢.jdbc的级别低于jpa.使用jdbc的db专业人员也可以编写比jpa更优化的sql.如果你给出了需要速度的关键点,那么jpa不是你的选择.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有