对IBatis的Cache设计的一点看法

前两天,又看了一下原作《IBatis in Action》,对缓存(Cache)一节又仔细阅读了一次,感觉 IBatis 的 Cache 设计有点鸡肋的感觉,企业级应用基本不会采用。

[b]1. 缓存什么?[/b]
书中写道,一般ORM框架,如Hibernate等,采用对象缓存,而IBatis采用的是简单查询缓存。
简单 query 缓存,意即:
cache.key = sql语句串
cache.value = 查询结果记录集合(List等)
对于一条 映射sql语句,执行时其条件值的集合,理论上是一个无限集,至少条件集会非常大。因此 sql + 条件值的组合数量非常庞大,按结果集合作为 cache.value 的方式缓存,可以预计,内存消耗非常巨大。

从缓存的对象来讲,Hibernate 等的两级缓存是一种更好的设计( session级缓存属于第一种 )。
对象缓存(Object Cache),将对象像库表记录一样,按主键进行缓存,相当于建立一个简单的内存数据库;
查询缓存(Query Cache), 与 IBatis 的缓存所指相同,但它只缓存结果集的主键,因此 cache.value 空间消耗大大减少。

这样对比可见,IBatis 的Cache 不太适合数据量庞大的企业级应用,大型网站应用。

[b]2. 缓存到哪儿?[/b]
应该说,如果 IBatis没有提供对 OSCache 的默认支持,那么IBatis的Cache仅仅适合单机部署的小型应用。
但 OSCache 作为分布式缓存的一种,在实际应用中仅占不大的比例。

对于集群部署的大型应用,如果 IBatis 能提供对 Whalin Memached, Spy Memcached,Coherence 等提供支持,将是一种更好的选择。
幸好,IBatis 还提供了 Cache 的扩展点,可以集成自定义的 Cache 方案。 ^_^
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值