`
jj5715
  • 浏览: 3019 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

请教关于非公共性网站对hibernate的使用。

    博客分类:
  • java
阅读更多
非公共性网站即没有登录是无法进行功能使用的网站,比如邮箱。
如果使用hibernate,其缓存的功能是否没有太大的意义。
因为用户与用户之间使用的数据库内容是不同的。
个人感觉如果使用缓存是不是命中率会很低,如果用的话是不是很浪费。
疑问:
1、缓存的必要性?
2、如果没必要用缓存,那Hibernate的必要性?
分享到:
评论
15 楼 Joo 2008-03-08  
robbin 写道
今天刚好又和一些朋友聊到这个话题。话说淘宝网站也是用iBATIS的,但淘宝即将进行整个架构的改造,正在犹豫要不要用Hibernate,现在Google也贡献了Hibernate Shards,正好是淘宝准备垂直切分数据库可以用得上的现成技术,那如果还是iBATIS,编程就过于复杂了。但是淘宝也有一个特点,就是DBA超强,所以缓存啥的差点也还有DBA顶上优化SQL,那你用Hibernate的话,毕竟SQL不是手写的,难以进行深度优化。

所以适合自己的就是最好的,不要简单的肯定或者否定Hibernate。


老大能不能说说什么叫垂直切分数据库?
刚才查了查shards,有点意思

引用
你不能总是把你所有的关系数据放在一个单独的关系数据库里。有时候你只是有太多的数据。有时候你有一个分布式的部署体系(如果使用单一数据库可能导致从加州到印度的网络延迟太大)。甚至可能是非技术理由(一个潜在的客户根本不做交易除非她公司的数据存在自己的数据库里)。无论你的理由是什么,在多重数据库之间对话无疑会让你的程序开发变得复杂。hibernate shards是被设计来封装和最小化这种复杂性的一个框架,它在hibernate core上提供了水平分割的支持。简单的来说,我们的目标是通过hibernate在多重数据库上提供一个统一的视图。

那么,shard是什么?好问题。"shard"是"部分"或"分割"的另一种说法,但是在google,它专指选择权。hibernate shards源自google的一个工程师小团队的20%项目(译注:google员工有20%的工作时间可以从事非工作事件),因此这个项目的命名从一开始就考虑到shards。把目前的工作成果开源是因为我们想让hibernate社区能尽可能快的从我们的努力中获益,同时相比私有化,我们期望社区能更快的帮助我们达到稳定的发布版本。我们迫切的希望在设计和实现里找出问题,同时在完善的过程中,我们也感激你的耐心。

14 楼 billgmh 2008-03-05  
robbin 写道
简直都成月经贴了。

他们说Hibernate性能不行,我说Hibernate的缓存是性能必杀技;
他们接着说互联网网站不能用ORM,我说JavaEye的对象缓存命中率是88%;
他们又说你那是BBS,大家点击频繁,所以命中率高,我说JavaEye的博客每个内容都不一样,照样命中率高;
他们最后说非公共性网站不能用ORM,我只能说你做一个非公共性网站干吗用呢?

这个世界多的是不用ORM但是性能很好的网站,这个世界也有很多用了ORM性能也很好的网站,连Google都在用Hibernate。你要用ORM便用,你不要用ORM便不用,一边嘴里说着不用不用就不用,一边心里忐忑不安,我到底用还是不用,用还是不用,非得说服所有人都不用才安心,不如别惦记着Hibernate了,省得自己费心,别人看着费劲。



老大的话实在太精辟了。确实,根本没必要说服全天下人都赞同自己的观点。假如Hibernate真的不能适应这个大环境的发展的话,它早就退出市场被别的产品替代了。所以那个自己用起来方便就手就用吧。其实真正的问题我感觉是到了后期维护以及出现问题后要解决的难度。

个人愚见。
13 楼 robbin 2008-03-01  
今天刚好又和一些朋友聊到这个话题。话说淘宝网站也是用iBATIS的,但淘宝即将进行整个架构的改造,正在犹豫要不要用Hibernate,现在Google也贡献了Hibernate Shards,正好是淘宝准备垂直切分数据库可以用得上的现成技术,那如果还是iBATIS,编程就过于复杂了。但是淘宝也有一个特点,就是DBA超强,所以缓存啥的差点也还有DBA顶上优化SQL,那你用Hibernate的话,毕竟SQL不是手写的,难以进行深度优化。

所以适合自己的就是最好的,不要简单的肯定或者否定Hibernate。
12 楼 jj5715 2008-03-01  
robbin 写道
简直都成月经贴了。

他们说Hibernate性能不行,我说Hibernate的缓存是性能必杀技;
他们接着说互联网网站不能用ORM,我说JavaEye的对象缓存命中率是88%;
他们又说你那是BBS,大家点击频繁,所以命中率高,我说JavaEye的博客每个内容都不一样,照样命中率高;
他们最后说非公共性网站不能用ORM,我只能说你做一个非公共性网站干吗用呢?

这个世界多的是不用ORM但是性能很好的网站,这个世界也有很多用了ORM性能也很好的网站,连Google都在用Hibernate。你要用ORM便用,你不要用ORM便不用,一边嘴里说着不用不用就不用,一边心里忐忑不安,我到底用还是不用,用还是不用,非得说服所有人都不用才安心,不如别惦记着Hibernate了,省得自己费心,别人看着费劲。



我只是把我平时工作中的不是太理解的事拿出来,想大家讨论一下,也想从中得到一些启发。
完全不是想让大家来评论hibernate好坏。
从robbin的回复中来看,robbin对hibernate缓存方面的一些讨论已经比较厌烦。

11 楼 lsk 2008-03-01  
robbin 写道
简直都成月经贴了。

他们说Hibernate性能不行,我说Hibernate的缓存是性能必杀技;
他们接着说互联网网站不能用ORM,我说JavaEye的对象缓存命中率是88%;
他们又说你那是BBS,大家点击频繁,所以命中率高,我说JavaEye的博客每个内容都不一样,照样命中率高;
他们最后说非公共性网站不能用ORM,我只能说你做一个非公共性网站干吗用呢?

这个世界多的是不用ORM但是性能很好的网站,这个世界也有很多用了ORM性能也很好的网站,连Google都在用Hibernate。你要用ORM便用,你不要用ORM便不用,一边嘴里说着不用不用就不用,一边心里忐忑不安,我到底用还是不用,用还是不用,非得说服所有人都不用才安心,不如别惦记着Hibernate了,省得自己费心,别人看着费劲。


老大始终还是老大。。我们这全部hibernate。最适合的才是最好的。
10 楼 yyjn12 2008-03-01  
建议javaeye增加结帖功能.

若为讨论帖,当一个帖拥有了确切答案时.
若为求教帖,当有人解决了问题时.

应当能够结帖,免得过多无意义的回复将帖子再度顶起.
9 楼 suxy 2008-03-01  
呵呵,确实月经,javaeye上可以搜到N篇这样的帖子。

其实什么用好了都可以解决问题,关键是看你们的团队里有没有合适的人来用它。如果有hibernate高手,就用Hibernate,如果有很好的dba,就用ibatis或jdbc.

javaeye有robbin所以用orm没问题,但你们的团队没有这样的人,或者没有信心留住这样的人,就不要用orm,毕竟dba还是相对好找一些.
8 楼 kwyjibo 2008-03-01  
实在不想用Hibernate,
推荐 Torque , 比较简单易用,就是文档少点。
7 楼 glamey 2008-02-29  
robbin 写道
简直都成月经贴了。

他们说Hibernate性能不行,我说Hibernate的缓存是性能必杀技;
他们接着说互联网网站不能用ORM,我说JavaEye的对象缓存命中率是88%;
他们又说你那是BBS,大家点击频繁,所以命中率高,我说JavaEye的博客每个内容都不一样,照样命中率高;
他们最后说非公共性网站不能用ORM,我只能说你做一个非公共性网站干吗用呢?

这个世界多的是不用ORM但是性能很好的网站,这个世界也有很多用了ORM性能也很好的网站,连Google都在用Hibernate。你要用ORM便用,你不要用ORM便不用,一边嘴里说着不用不用就不用,一边心里忐忑不安,我到底用还是不用,用还是不用,非得说服所有人都不用才安心,不如别惦记着Hibernate了,省得自己费心,别人看着费劲。



还是老大说的透彻。
6 楼 robbin 2008-02-29  
简直都成月经贴了。

他们说Hibernate性能不行,我说Hibernate的缓存是性能必杀技;
他们接着说互联网网站不能用ORM,我说JavaEye的对象缓存命中率是88%;
他们又说你那是BBS,大家点击频繁,所以命中率高,我说JavaEye的博客每个内容都不一样,照样命中率高;
他们最后说非公共性网站不能用ORM,我只能说你做一个非公共性网站干吗用呢?

这个世界多的是不用ORM但是性能很好的网站,这个世界也有很多用了ORM性能也很好的网站,连Google都在用Hibernate。你要用ORM便用,你不要用ORM便不用,一边嘴里说着不用不用就不用,一边心里忐忑不安,我到底用还是不用,用还是不用,非得说服所有人都不用才安心,不如别惦记着Hibernate了,省得自己费心,别人看着费劲。

5 楼 skydream 2008-02-29  
楼主说的这种情况,的确是最不适合做缓存的情况。

我就是做邮件系统的,而且是大型邮件系统。所有类似hibernate的工具,很难使用在产品中,没有办法,数据根本不能共享,体现不出优势。而hibernate的速度比起写好比较好的直接jdbc还是有些差距。

单独为一个用户缓存自己的数据,内存又顶不住,只好每次都重新取数据,最多个别简单的属性(通常是一个标记位,boolean型的)放session里面。
4 楼 yyjn12 2008-02-29  
jj5715 写道
啊。不好意思,其实我说的那个缓存就是指hibernate的那个缓存。。是我没写清楚。。
感谢二位的意见。



那个缓存是为了弥补弊端的.

使劣势不再是劣势的.

而不是创造优势的.
3 楼 jj5715 2008-02-28  
啊。不好意思,其实我说的那个缓存就是指hibernate的那个缓存。。是我没写清楚。。
感谢二位的意见。
2 楼 bluemeteor 2008-02-28  
yyjn12 写道
jj5715 写道
非公共性网站即没有登录是无法进行功能使用的网站,比如邮箱。
如果使用hibernate,其缓存的功能是否没有太大的意义。
因为用户与用户之间使用的数据库内容是不同的。
个人感觉如果使用缓存是不是命中率会很低,如果用的话是不是很浪费。
疑问:
1、缓存的必要性?
2、如果没必要用缓存,那Hibernate的必要性?



做互联网应用的话,一般是不太倾向于使用hibernate的.特别是做负载特别大的动态应用的话.
因为hibernate虽然有缓存,但是这个东西需要极其高的技巧才能避免性能上出现问题.
互联网应用的性能优化一般不在这个层面上.我的个人理解,互联网行业的数据库操作应当避免有大数据的联表查询等操作,尽量都是些有索引的单表查询,或是小数据表的联合查询.采用memcached来缓存数据以减轻数据库的压力,squid来缓存静态页面(如果需要的话).

从数据库入手的一些优化,不外是数据散列,数据库的slave-master等.
楼主讨论hibernate缓存的命中率的话,与我的理解有些差异.

hibernate可以使用面向对象的方式来进行数据库持久化操作,它带来一些好处,但我并不甚理解.至少可以不必写烦琐的jdbc,操作connection statement,resultset这些东西,实体与db record自动映射吧.

个人感觉hibernate的好处还是在开发与维护上,而不在运行上.
因为说起效率,即便hibernate很好的处理了缓存,延迟加载等机智,最多也与jdbc相当而已,不至于比jdbc效率高出很多吧?

这块内容我理解很浅薄,以上说的一些个人观点,仅仅供参考.
期待大家对此问题发表的观点


非常同意你关于memcache,squid,DB的分布与同步方面的观点,在上几个项目中的确是这样来实现的,但是我认为这些技术应该统筹为运维层面,如果一个J2EE的应用必须要依赖于java之外的技术来实现性能优化和可伸缩性,这并不是很好的方法。这不是否定其他的优化方案,实际上从squid一直到数据库服务器的磁盘I/O,每个影响性能的地方都要考虑到,但是从J2EE这个黑盒来看,一些性能优化是必须并且无法替代的。

BTW,memcache,squid,ligthHttpd这些技术也同样有着相应的学习曲线,相对于hibernate的缓存来讲,我想这些东西更加难一些,毕竟hibernate是一个开源的java框架。


关于hibernate,你所说的以下俩点:
1.做互联网应用的话,一般是不太倾向于使用hibernate的.特别是做负载特别大的动态应用的话.
2.互联网行业的数据库操作应当避免有大数据的联表查询等操作,尽量都是些有索引的单表查询,或是小数据表的联合查询

这正是hibernate或者O/R mapping优越于JDBC或者JDBC template的地方。而hibernate的弱势在于处理复杂的联合查询以及批量处理方面。

“因为hibernate虽然有缓存,但是这个东西需要极其高的技巧才能避免性能上出现问题.”,这句话本身说的正确,而且令人矛盾的是,缓存的出现是为了解决性能问题,而现在使用缓存却要避免性能出现问题。问题的根源不在于hibernate,而在于谁在用hibernate。

楼主询问是否应该使用hibernate或者缓存,我推荐阅读hibernate in action这本书,一个帖子不可能给你足够的信心做出选择,但是我相信这本书可以
1 楼 yyjn12 2008-02-28  
jj5715 写道
非公共性网站即没有登录是无法进行功能使用的网站,比如邮箱。
如果使用hibernate,其缓存的功能是否没有太大的意义。
因为用户与用户之间使用的数据库内容是不同的。
个人感觉如果使用缓存是不是命中率会很低,如果用的话是不是很浪费。
疑问:
1、缓存的必要性?
2、如果没必要用缓存,那Hibernate的必要性?



做互联网应用的话,一般是不太倾向于使用hibernate的.特别是做负载特别大的动态应用的话.
因为hibernate虽然有缓存,但是这个东西需要极其高的技巧才能避免性能上出现问题.
互联网应用的性能优化一般不在这个层面上.我的个人理解,互联网行业的数据库操作应当避免有大数据的联表查询等操作,尽量都是些有索引的单表查询,或是小数据表的联合查询.采用memcached来缓存数据以减轻数据库的压力,squid来缓存静态页面(如果需要的话).

从数据库入手的一些优化,不外是数据散列,数据库的slave-master等.
楼主讨论hibernate缓存的命中率的话,与我的理解有些差异.

hibernate可以使用面向对象的方式来进行数据库持久化操作,它带来一些好处,但我并不甚理解.至少可以不必写烦琐的jdbc,操作connection statement,resultset这些东西,实体与db record自动映射吧.

个人感觉hibernate的好处还是在开发与维护上,而不在运行上.
因为说起效率,即便hibernate很好的处理了缓存,延迟加载等机制,最多也与jdbc相当而已,不至于比jdbc效率高出很多吧?

这块内容我理解很浅薄,以上说的一些个人观点,仅仅供参考.
期待大家对此问题发表的观点

相关推荐

    hibernate.jar包

    1. **Hibernate API**:这是Hibernate提供的公共接口和类,包括Session、SessionFactory、Query等,它们是开发者进行数据库操作的主要入口。 2. **Entity Manager**:基于JPA(Java Persistence API)的实现,提供...

    hibernate验证框架学习

    **Hibernate Validator** 提供了一系列公共 API,使开发者能够更容易地访问和使用验证功能。 ##### 11.2 快速失败模式 通过启用快速失败模式,可以在发现第一个验证错误时立即停止验证过程,这对于提高性能非常有...

    hibernate3源码

    它是使用GNU宽通用公共许可证发行的自由、开源的软件。它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。Hibernate也是目前Java开发中最为流行的数据库持久层框架,现已归JBOSS所有。...

    Hibernate3.1_学习源码

    01 01Hibernate_Handwork : 手工配置使用Hibernate,其中详细标了Hibernate进行持久化的一些过程,因为是Hibernate的入门实例,所以注释很详细,其中有session的关闭后重建问题。 02 02Hibernate_UseMyEclipse: 利用...

    jsp javabean spring hibernate

    【标题】"jsp javabean spring hibernate" 涉及的是一个经典的Java Web开发技术栈,主要包括JSP(JavaServer Pages)、JavaBean以及Spring和Hibernate两大框架。这些技术是构建高效、可维护的企业级应用的重要组成...

    org.hibernate.ejb-library-3.4.0.GA-A

    osgi是一种模块化系统,用于Java应用程序,它允许动态地发现、加载和卸载模块,提高了软件的可维护性和可扩展性。在osgi环境中,hibernate需要特殊打包和配置以适应其模块化特性。 virgo是基于Eclipse Equinox OSGi...

    Hibernate_3.2属性文档介绍_中文

    标题和描述均提到了“Hibernate_3.2属性文档介绍_中文”,这表明文档主要聚焦于Hibernate 3.2版本的属性配置与使用说明。Hibernate是Java领域内一个流行的开源对象关系映射(ORM)框架,它允许开发人员将数据库表...

    hibernate4.1.4.FinalAPI,开发手册,开发指南

    1. **Hibernate ORM框架**:Hibernate是一个开源的ORM库,它允许开发者用面向对象的方式处理数据库操作,减少了SQL的直接使用,提高了代码的可读性和可维护性。在Hibernate中,实体类代表数据库中的表,实体对象代表...

    jpa/hibernate继承注解

    以下是对"jpa/hibernate继承注解"这一主题的详细说明。 1. **单一表继承(Single Table Inheritance, STI)** 单一表继承是最简单的继承策略,所有的子类信息都存储在一个数据库表中。使用`@Inheritance(strategy ...

    Hibernate常见面试题

    根据给定的文件内容,我们可以总结出一系列与Hibernate框架相关的知识点。这些知识点涵盖了常见的面试问题,可以帮助准备面试或深入理解Hibernate技术的人士更好地掌握该领域的内容。 ### Hibernate的检索方式 1. ...

    深入学习hibernate

    通过深入学习Hibernate,开发者不仅可以掌握如何在Java应用程序中处理数据库交互,还能了解如何利用ORM框架提高开发效率,减少与数据库的直接耦合,从而提升软件的可维护性和可扩展性。对于任何希望从事Java企业级...

    Spring+Hibernate工具类所有增删改查

    文件列表中的"spring+hibernate公共方法,增删改查"表明这个工具类库包含了Spring和Hibernate的集成,提供了统一的接口来执行CRUD操作。这可能是一个单独的Java类,包含了如下的方法: - `save(Object entity)`: ...

    hibernate 反射原理

    2. **对象状态管理**:Hibernate使用反射来监视和管理实体对象的状态变化,如插入、更新或删除操作。它通过反射读取和设置对象的字段值,从而保持对象与数据库之间的一致性。 3. **查询和操作**:Hibernate的查询...

    JSF+Spring+Hibernate的实例讲解.doc

    Hibernate 则是一个对象关系映射 (ORM) 工具,能够将 Java 类与数据库表进行映射,使得开发者可以使用对象模型来操作数据库。 在集成 JSF、Spring 和 Hibernate 的过程中,通常会遵循以下步骤: 1. **配置 JSF**:...

    hibernate

    1. **Hibernate ORM**: Hibernate 是一个开源的ORM框架,它允许开发者用面向对象的方式处理数据,将Java对象和关系数据库的数据进行映射,减少了对SQL的直接依赖。 2. **对象关系映射(ORM)**: ORM是Hibernate的...

    hibernate文档

    2. **高度可移植性**:由于 Hibernate 对数据访问进行了封装,因此基于 Hibernate 编写的代码几乎可以在任何支持 JDBC 的数据库上运行,这大大增强了应用程序的可移植性。 3. **轻量级框架**:Hibernate 不要求 Java...

    主体性与公共性的历史统一.docx

    【主体性与公共性的历史统一】这一主题探讨的是在实现中国梦的过程中,主体性和公共性的关系以及它们在历史发展中的重要性。主体性是指人的自我决定和自我实现的能力,强调人不仅是实现目标的工具,而是自身目标的...

Global site tag (gtag.js) - Google Analytics