`
Qieqie
  • 浏览: 340024 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

hibernate如何自动利用MemCached的getMulti能力?

阅读更多
我对使用Hibernate+MemCached有一点未解决考虑:

MemCached背景:使用MemCached保存从数据库select出来的某些数据,MemCached作为应用程序和数据库某些数据之间的一个存储中间级。

应用背景:在使用Hibernate时,实现Hibernate二级缓存接口插入到Hibernate中,通过实践,能够轻松将MemCached和Hibernate进行结合应用到实际应用中。


现在转入正题:

hibernate如何才能*自动*充分利用MemCached提供getMulti能力?

    如果使用了本地的二级缓存(e.g:OSCache,EHCache),利用query.iterate一般能够提高系统的性能,因为iterate返回Iterator后,调用Iterator.next返回对象后(这是还没有去查找命中或select该主键对应数据行),获取他属性时会从二级缓存里查找是否命中,因为这个查找是本地查找,所以效率比较高。

  OK,我的问题是:

     1)如果我使用的是需要网络行为的MemCached,我照本宣科地,调用Iterator.next,访问其属性时,应用程序通过网络访问MemCached,查找是否命中。假如最好情况我每次next都命中,这是最好的。可是有多少个对象,就有多少次网络访问。这样似乎并不划算,可能比直接query.list更慢。

     2)如果我每次都只是调用Iterator.next时,把id纪录下来,放到数组中,再把这个数组传给MemCached,去查看这些数据是否命中,这样可以只有一次网络访问(假如只有一台MemCached)。这样解决了多次网络访问的问题,可是却不是hibernate的自动行为,这很没意思,因为:
           a)没有命中,怎么办?自己再去session.load对象?
           b)命中了,又能怎么样?命中了的这些数据现在并不是Hibernate管理的!


  

分享到:
评论
6 楼 hqman 2007-08-10  
是否有做过 query list 和Iterator 性能对比?
5 楼 imjl 2007-06-06  
提示下吧

分层次,,,全局,局部,个体


关于性能,多想无义,先根据需求设计,搭建,寻找瓶颈,解决。
4 楼 yfmine 2007-05-09  
Qieqie 写道
如果我每次都只是调用Iterator.next时,把id纪录下来,放到数组中,再把这个数组传给MemCached,去查看这些数据是否命中,这样可以只有一次网络访问(假如只有一台MemCached)。

怎么才知道本次next了,是不是就要取出对象立即使用呢...或者说,怎么判断next结束了,我不会再next了...
3 楼 piaoling 2007-05-09  
兄弟,你长得太像我同学了.晕倒~~
2 楼 Qieqie 2007-05-08  
〉〉〉Robbin头像变化好大阿~~~惊吓了一下

目前我在重新思考一个产品的重新架构,该项目不是一个互联网项目,而是一个XXX监控项目。

项目的背景:
各种监控设备开启时候需要进行注册(就像手机开机时总是要找个基站注册一样,或类似互联网站的登录操作),设备数量为千至万的级别,他们注册到不同的“基站”中,由基站再统一连接到中心服务器上(java程序,协议为http based,多台集群布属)。注册要牵扯到不少表/对象,不仅仅只是设备对象,而且系统要求设备注册要非常快。设备运行时,总是不时会发生各种安全报警、故障报警、状态报警发送到“基站”,由“基站”转发到中控服务器。发生报警时候,若有预设预案,则设备按照该预案执行响应。预案是操作员事前在中控服务器上定制,在设备注册时返回给设备的。还有一部分操作员,就是整天盯着监控客户端,实时人工处理警报,同时他们还会处理一些小量请求,比如偶尔调整一下设备基本信息(如GIS信息),增加一个设备,增加一个用户,注释一下各种报警事件等等。


对于这样的项目,我计划采用如下策略进行重新架构:

1、所有的设备注册、操作员登录等会话信息使用database+memcached记录保存,把Memcached作为session中心。
2、又因为设备基本信息,人员基本信息,预案,结构/部门,基础字典数据 都是非经常变动的,结合Hibernate使用本地二级缓存(因为:不存在频繁变更数据导致缓存同步广播风暴的问题)
3、对于报警事件,则使用自己的设计,设计一个池,来了报警则先放到内存池中(除非超过数量限制),由其他线程控制负责插入到数据库。防止报警突增导致类似DOS现象。
4、对于操作人员等一些小数据量的操作,则直接insert到数据库。


使用memcached作为session中心,Robbin已经阐述了这种用法,也非常适合我的情况。

hibernate二级缓存方面,在这个项目中,使用本地缓存而非memcached的理由:
1、数据变更并不频繁(就这个项目而言,这是和互联网最大的区别之一)
2、响应必须非常快(我担心memcached可能在多次网络方面不满足要求--也仅仅只是担心而已,还没有实验)

哪些方面还不足呢?
1 楼 robbin 2007-05-08  
我觉得你没有必要刻意去减少访问memcached的网络通讯次数问题。我自己做过压力测试,表明Java应用程序和memcached网络通讯造成的系统开销微乎其微。

使用memcached,那么意味着你的Java应用层已经使用了cluster了,在cluster的场景下,系统的瓶颈肯定不会是应用层,因为应用层的cluster只要保持SNA,就理论上可以无限水平扩展。因此系统架构的终极目标就是要尽量减少对数据库的单点压力。

也许1+n次查询,因为多次网络通讯,使得单次页面请求的响应时间稍微下降,但是代价是能够尽可能减轻了对数据库的负担了,那么从整体架构,或者说整个应用性能的角度来说,明显有所提高。

相关推荐

    hibernate-memcached包

    总的来说,`hibernate-memcached` 提供了一个方便的途径,让开发人员能够利用Memcached的强大缓存能力来提升基于Hibernate的应用程序的性能。通过正确配置和使用,可以显著减少数据库的负载,提高响应速度,为大规模...

    hibernate-memcached, 在Hibernate中,使用Memcached作为第二级分布式缓存的库.zip

    hibernate-memcached, 在Hibernate中,使用Memcached作为第二级分布式缓存的库 休眠 memcachedHibernate中使用Memcached作为第二级分布式缓存的库。基于优秀的spymemcached客户端包含对 Whalin ( danga ) memcached...

    hibernate-memcached-1.5.jar

    这个包是最高版本了,google code是1.22,但是这个版本是基础班的1.5版本.是github上源代码经过我打包出来的jar

    hibernate整合memcached需要的jar包

    当我们将Hibernate与Memcached整合时,可以利用Memcached的高速缓存能力来优化Hibernate的数据访问性能。 在标题提到的“hibernate整合memcached需要的jar包”中,主要包括以下四个关键库: 1. **hibernate-...

    hibernate-memcached-1.1.0-sources.zip

    整合Hibernate与Memcached,主要是为了利用Memcached的高速缓存特性,优化Hibernate的数据访问性能。`hibernate-memcached-1.1.0-sources.zip`提供的源码实现了一个Hibernate二级缓存提供者,它将Hibernate的查询...

    项目中使用 hibernate-memcached 做二级缓存

    总的来说,结合Hibernate的二级缓存机制和Memcached的分布式缓存能力,可以在项目中实现高效的数据缓存,提升系统的响应速度。同时,了解并掌握Memcached的基本原理和配置方法,对于提升系统架构的优化能力大有裨益...

    hibernate4+spring4+memcached 工程

    "memcached"标签表示此项目利用了Memcached作为缓存系统,它可以存储和检索大量数据,减少对数据库的频繁查询,从而提高系统的整体性能和响应时间。 从【压缩包子文件的文件名称列表】"hibernate-memcached-master...

    hibernate-memcached-1.1.0.jar

    hibernate-memcached-1.1.0.jar

    memcached整合进hibernate4的资源包

    hibernate使用memcached作为二级缓存所需要的资源包,包括memcached的windows安装文件、hibernate3和hibernate4整合memcached的jar包 文件目录:commons-codec-1.10.jar、hibernate3-memcached-1.5.jar、hibernate4-...

    hibernate集成memcached所需jar

    memcached-2.5-sources.jar、hibernate-memcached-1.2.2-sources.jar、spy-2.4.jar这三个jar不太好找,剩下两个commons-codec和slf4j-log4j直接maven配置一下就行 <groupId>org.slf4j <artifactId>slf4j-log4j12 ...

    hibernate-memcached

    hibernate-memcached,一个分布式缓存框架,很强大,这里提供hibernate集成jar

    最新二级缓存memcached,支持hibernate4

    解决目前memcached不支持hibernate4的缺陷,hibernate配置<property name="hibernate.cache.region.factory_class">com.googlecode.hibernate.memcached.MemcachedRegionFactory</property>

    hibernate-memcached-1.1.0-javadoc.zip

    《Hibernate与Memcached结合使用详解》 在Java的持久化框架中,Hibernate是备受推崇的一员,它极大地简化了对象关系映射(ORM)的过程。而Memcached则是一种高性能的分布式内存对象缓存系统,用于加速动态Web应用。...

    memcache也spring,hibernate的配置

    综上所述,这个项目展示了如何在Java环境下,利用Maven构建工具,将Memcached、Hibernate和Spring集成,实现高效的数据缓存策略,提升应用性能。对于开发人员来说,理解和掌握这些配置能帮助他们更好地优化大型...

    memcached整合hibernate资源合集

    整合Memcached和Hibernate的主要目的是利用缓存机制来减少对数据库的直接访问,从而提高系统的整体性能。 整合过程通常包括以下几个步骤: 1. **安装与配置Memcached**:首先,你需要在服务器上安装Memcached,并...

    memcached-hibernate-1.3

    google上的这个包最多是1.2.2但是github上是1.3,源代码下载下来后,我打包为jar的

    10.1.1 redis相比memcached有哪些优势?.md

    10.1.1 redis相比memcached有哪些优势?

    memcached使用最佳实践(英文版)

    #### 1.5 如何配置Memcached? Memcached服务器的配置主要是通过命令行参数完成的,最常见的是设置最大可用内存大小(-m)、监听的IP地址(-l)和端口(-p)。此外,还可以设置各种其他选项,如是否启用统计信息(-...

    memcached作为hibernate二级缓存必备的jar包

    1. **hibernate-memcached-1.2.2.jar**:这是Hibernate与Memcached之间的一个适配器,它提供了将Hibernate的二级缓存策略与Memcached服务连接的功能。这个库包含了必要的API和实现,使得Hibernate能够识别并使用...

Global site tag (gtag.js) - Google Analytics