MyException - 我的异常网
当前位置:我的异常网» Java Web开发 » hibernate效率有关问题

hibernate效率有关问题(2)

www.MyException.Cn  网友分享于:2015-08-27  浏览:25次


hibernate/jdo是什么?网上说的很滥的一句话就“是对jdbc的轻量级封装”,说白了就是一个第三方类库。但是做了很好的封装,完全可配置化的数据库操作(映射文件),提供了面向对象风格的查询语句(hql)--这很重要,不要忘了java本身是oo的!纯sql语句却不是oo的,是结构化的。相信各位用过hibernate的大侠都体验了再各个关联对象之间随意导航的便利了(user.depart.userset...)吧。至于L1和L2缓存,Lazy等等,这都是hibernate对性能提升的一种机制。
jdo和hibernate类似(我说的是jdo与hibernate的出发点是类似的,技术细节不在讨论之内)。

这样,纯粹从性能角度对比jdbc与hibernate是很片面的。hibernate的初衷并不是提高程序的性能而是简化程序开发流程,让程序员把工作注意力关注在业务处理上---至少hibernate可以不用做异常处理。

回到楼主说你们的经理说hibernate的缓存会带来问题,这只能说没有用好hibernate的缓存,甚至对它的缓存机制停留在模糊认识状态。如果你不在意性能问题,完全可以禁用它的缓存都没问题。

一句话:任何一种技术/框架的出现都是为了解决特定的问题,并非对先前技术的完全颠覆

------解决方案--------------------
探讨
上面.
在技术社区一副吵架的嘴脸, 很抱歉.

低头认错.

最近很浮躁, 静不下心了. 检讨ing

------解决方案--------------------
我虽然对hibernate没实际应用经验,但对jdbc有丰富的使用经验,两者的在概念、技术上还是比较清晰的。而且刚好有六年的电信省集中业务支撑系统部分功能模块的开发经历,应该也算是所谓的主流ISV里的老兵。相对于一个地区级的OA其性能要求应该远低于省集中的BOSS,我们经常碰到的一个性能问题就是Db服务器忙死,而App服务器却在休息,这个可能是完全面向数据库的jdbc大量应用的而导致的一个问题吧!另外为什么不把某些简单功能转为hibernate其在人力培训方面消耗较大,毕竟大环境是业务强于技术的原因有关。不过个人觉得这种o/r技术应该是趋势,只是现在还没有一个统一的、可以完全替换jdbc类技术的技术出现而已
------解决方案--------------------
确实我也不太喜欢用hibernate。

一般是用完框架后,提炼出其比较好的东西。

然后自己写框架,符合自己逻辑思维习惯。

是自己写的东西,要做优化的时候方便修改。如果是别人的框架,到处找文档,看源码,挺烦的!

项目开发一般刚开始都是做原型,怎么快怎么做。刚开始是不太关注优化方面的,也不知道将来会优化哪个位置。

只有整个项目在你眼里完全清晰,在后期才有能力去知道该怎么优化。

到后期,需要提高效率的,提高效率。需要加缓存的,加缓存。需要分布式负载均衡的,加分布式。得心应手。
------解决方案--------------------
如大多数人所说,用好jdbc绝对比hibernate效率好!
比如我每天8个小时内要插入300万条记录,这个记录里有六七个外键,外键关联的表还有一些其他外键,每张表平均有900万条数据要插入
与hibernate操作对象来说,我相信jdbc的效率要高很多!

探讨
引用:
要做一个地区的中国电信的oa,今天说到项目架构时,项目经理说不要用hibernate,完后说了一堆道理,我没听懂,好像有提到缓存,请问hibernate为什么效率不高呢,听他那意思是要直接用jdbc,jdbc效率高?那为什么还出这种持久层框架呢

纯属谬论,你们的项目经理懂java不,
hibernate最大的有点就是延迟加载,避免业务程序直接访问数据库,建设数据库的负载。对于hibernate的二级缓存的运用更是提升了整个系统的缓冲能力,不过要真正用好hibernate,对于系统的架构设计来说要求很高,首先需要充分的了解系统中个业务流程的联系,设计完善的数据模型,构建表直接正确的关系,这样才能保证hibernate在映射的时候,级联缓冲、操作的正确性,其次如果要使用hibernate的二级缓存,必须先对其hibernate的缓存机制有很好的把握。不要光认为能使用session的几个api操作数据库,就了解hibernate。如果项目是第一次运用hibernate,且没有成熟的业务分析,完善的系统框架设计,建议还是不要使用hibernate,毕竟驾驭hibernate还是需要一个时间,起码1-2年后。能对hibernate有个良好的了解就很不错啦

------解决方案--------------------
批量的update\save\delete,hibernate效率要慢很多
用于查询,正如楼上部分同志所说:如果你一次就要查询w级以上的记录,我个人认为你们的业务逻辑有问题。
通常的小数据量(几十条)查询,由于缓存,还是hibernate快一些的,而这正是我们实际中经常用到的。
最后,使用jdbc和hibernate的开发效率还是差很多的。
------解决方案--------------------
这个帖子怎么是<精华>呢?搞不懂...
项目管理人员肯定会根据项目需求选择构架的.
可能项目中每天有几亿条数据....像话费单...

用HB有时候不够灵活.呵呵
用原生态的jdbc操作也有优势....
没什么好吵的了!

另外项目管理中,人力资源的限制:每个人水平不同,驾驭hb的能力不同.最后搞的代码乱七八糟.
时间限制什么的...

做项目的目的是成功的完成,成功的实施.人家才不管你用什么技术呢.
------解决方案--------------------
我也说一下。。。

上面有人说。。用了hibernate不想回到jdbc。。。我是用了hibernate好想回到jdbc...

而实际我也这样做了。

我是做企业开发的。。表之间的关系很复杂。。一张表关联十几张表。。

先不用效率。。首先我的开发效率都不知道低多少。。。
上面的人说有缓存。。。但试问。成熟点的人开发的系统,,有多少会直接jdbc的?要不自己实现个cache层,要不自己实现个框架?

效率绝对不比hibernate低,而且又不是做产品,又不需要切换数据库的。有必要通用吗?

一个技术的确是解决实际的问题。但是技术还得服务于现实,并不是为了hibernate而hibernate...

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有