该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-24
Hibernate 因为是 ORM .在很多时候还是不能完全实现原生SQL的效率.
如果项目时间紧,这个时候就要最求的是快速开发.那么选择Hibernate.当然执行效率上就有点欠缺了. 我们项目:两台服务器,日PV过千万.采用的是原生SQL,和缓存技术.如果使用Hibernate,我估计是难以承受的. |
|
返回顶楼 | |
发表时间:2010-03-24
最后修改:2010-03-24
downpour 写道 抛出异常的爱 写道 linliangyi2007 写道 抛出异常的爱 写道 最建议用的人往往对hibernate只是作过demo没有实践
这个评论有失“异常哥”的光辉形象啊 我咬着后槽牙说。。。 某个表100多个字段。。。。 恶心的我把它们分成N个小实体类 一个大类下还有一个包专门放它的组成类的包。 。。。。。。。。。。。 还好当时没有用openInview 不然我都不知道怎么死的。 PS:EJB项目的二期。 这就是你的实践?字段多和OpenSessionInView有啥关系? 下一个项目的同志门就把opensessioninview 研究明白上了。 之后有人把set 查出来在页面上过滤set找到对应的实体用来显示。。。。。。。 这辈子没见过那么精彩的数组变幻了 PS:想当年我是救火队的, 为了能看的懂,自己摸着改代码, 实在是在一个页面中上百个不同的属性 有相似的不相似的。 你说我E文差我也认了。 没法子想要改就得看的懂。 |
|
返回顶楼 | |
发表时间:2010-03-24
gdpglc 写道 anky_end 写道 很多做大系统的公司,例如电信,电力,卖油的,其系统历史悠久。
应该说对关系数据库操作的经验是自始至终贯彻下来,积累下来。对系统设计也是以数据库模型为中心而不是对象为中心。这是个设计思路上的根本不同。 另外就是系统风险,应该说,要用好hibernate,是有系统风险的。 罗宾当初有写过帖子,证明hibernate事实上没有性能问题,他也是有实例支撑,javaeye早期就是hibernate做持久层。但是很多电信、电力系统转向hibernate的过程中,能优化到javaeye层次的很少。很多系统仅仅一个登陆过程就比从前jdbc时代慢上许多。 说一千道一万,不熟悉不精通hibernate的还占大多数。 类似jdbc、ibatis这样的sql操作框架易过渡性还是很有吸引力的。 我想问一下,登陆过程会慢多少?是用测试工具测的吗? 这是个用户体验的过程,需要用测试工具测试么? 用户告诉你,我登陆比以前慢了,你能说,请你拿工具证明一下? 我并不是说hibernate就会慢了,就如linliangyi2007 说的,你可以认为是人的问题,不是工具的问题。 不过人就是这些人,工具却可以根据人的需要进行使用,就是这样。 |
|
返回顶楼 | |
发表时间:2010-03-24
大概挺hibernate的朋友们,没理解我的意思。
我承认,也有些hibernate高手会告诉我们,用好hibernate,性能绝对不差于jdbc;也实实在在有证据支持他们的说法。 但是从大多程序员开发的系统使用情况来说,都停留在粗浅的自动化生成外加一点hql和hibernate的对象查询的使用。这种情况下,初学者有些是着眼于hibernate易于使用,还没到调优这个层次。 等到了用户抱怨为什么速度慢?这时候五花八门的手段上马,这时候发现有许多陷阱没了解清楚。 我不是在反对hibernate,而是说,因人而异因地制宜。一个项目组有哪些人有没有精通hibernate,请注意,是精通,是使用好hibernate的关键所在。 |
|
返回顶楼 | |
发表时间:2010-03-24
linliangyi2007 写道 你也说了是Oracle的ERP,人家卖数据库的,最好你啥都用oracle,用存储过程,用oracle pro c,这样才有经济利益啊。
Hiberante自诞生那天开始就不是为了应付这种极端情况的,OK。 好吧,SAP的ERP请加个也字,他家不算卖DB出身了吧。 按照当时的实现来说,系统要充分的可配置,而且还要不停机的可调整配置,用DB为中心确实有它有利的一面。 全可配置在很多小地方很恶的,比如每张配置表基本都有两个,其中一个专门存不同语言的文字部分。连接表加倍。 插句无关的,oracle ERP还真不是用pro c,他奶奶个熊的,oracle forms/reports里面得用(类)pl sql才行。 |
|
返回顶楼 | |
发表时间:2010-03-24
小项目小访问量的,大概简单的按照demo方式使用hibernate也没关系。
模型什么也都可以按照最合适hibernate发挥作用的方式设计。 我见过一个系统,为了减少n+1查询,干脆把所有的属性中文也一并写在主表里面。 |
|
返回顶楼 | |
发表时间:2010-03-24
都继续抱怨吧
边抱怨边使用 |
|
返回顶楼 | |
发表时间:2010-03-24
anky_end 写道 这是个用户体验的过程,需要用测试工具测试么?
用户告诉你,我登陆比以前慢了,你能说,请你拿工具证明一下? 我并不是说hibernate就会慢了,就如linliangyi2007 说的,你可以认为是人的问题,不是工具的问题。 不过人就是这些人,工具却可以根据人的需要进行使用,就是这样。 我想前面的兄弟也不是怀疑你说的话,是想问问差异的程度吧。 而且用户投诉了登录速度慢,自己先搞个定量验证不是很正常么。 |
|
返回顶楼 | |
发表时间:2010-03-24
抛出异常的爱 写道 下一个项目的同志门就把opensessioninview 研究明白上了。
之后有人把set 查出来在页面上过滤set找到对应的实体用来显示。。。。。。。 这辈子没见过那么精彩的数组变幻了 PS:想当年我是救火队的, 为了能看的懂,自己摸着改代码, 实在是在一个页面中上百个不同的属性 有相似的不相似的。 你说我E文差我也认了。 没法子想要改就得看的懂。 求数组变换,长个见识。 老抛的这个项目是不是为了性能以数据库设计为核心,映射写得很憋屈,只能硬顶着处理。 这种情况确实郁闷。 |
|
返回顶楼 | |
发表时间:2010-03-24
gdpglc 写道 夜是天堂 写道 看上去楼主应该没做过什么高并发的系统。
对一个高并发系统来说,数据库往往是整个系统的瓶颈。可以说每一条SQL语句都是优化的对象。 实际操作中,开发人员会拿着可能用到的SQL语句与DBA进行充分沟通。从这一点就可以解释,为什么说Hibernate对DBA不友好(你总不能拿着映射关系去找DBA吧)。 另外一点,Hibernate动不动就做join,对高并发系统来说这是一件很奢侈的事情。往往采取数据冗余的方式。 至于数据库迁移,楼主做的项目应该不少,碰到过多少这样的案例? 当然,Hibernate是一个非常好的东西,对一般项目来说确实能省很多工作量,对高并发系统来说也不是完全不能用,用Hibernate来做简单对象的增、删、改是没有任何问题的。 1.。可以说每一条SQL语句都是优化的对象。 象这样的sql有什么可以优化的: select c.no, c.name from m_customers; 2 join不好吗? 你的意思,不用join,用多次查询数据库的办法获得数据? 1.。可以说每一条SQL语句都是优化的对象。 象这样的sql有什么可以优化的: select c.no, c.name from m_customers; ****a. 上亿的注册用户,考虑是否需要分页,是否需要按国家,按号码区间查询,必须用hints严格指定索引,不许order by, 按照每个字段排序都作成索引 2 join不好吗? 你的意思,不用join,用多次查询数据库的办法获得数据? ****3千万数据的table join 2亿数据的table, 你试试。(现实项目的数据库) 根据具体情况,解决方法有很多。 |
|
返回顶楼 | |