前两天,又看了一下原作《IBatis in Action》,对缓存(Cache)一节又仔细阅读了一次,感觉 IBatis 的 Cache 设计有点鸡肋的感觉,企业级应用基本不会采用。
1. 缓存什么?
书中写道,一般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 不太适合数据量庞大的企业级应用,大型网站应用。
2. 缓存到哪儿?
应该说,如果 IBatis没有提供对 OSCache 的默认支持,那么IBatis的Cache仅仅适合单机部署的小型应用。
但 OSCache 作为分布式缓存的一种,在实际应用中仅占不大的比例。
对于集群部署的大型应用,如果 IBatis 能提供对 Whalin Memached, Spy Memcached,Coherence 等提供支持,将是一种更好的选择。
幸好,IBatis 还提供了 Cache 的扩展点,可以集成自定义的 Cache 方案。 ^_^
分享到:
相关推荐
ibatis学习 ibatis总结 ibatis ibatis ibatis
Spring对IBatis的整合 10.3 Spring对IBatis的支持 Spring对IBatis提供了完善的内建支持。使用Spring提供的IBatis辅助类,可以大大简化原有的IBatis访问代码。这些辅助类位于org.springframework.orm.ibatis包下,...
ibatis资料ibatis资料ibatis资料ibatis资料ibatis资料ibatis资料ibatis资料ibatis资料ibatis资料
最近想在最新的Spring5.0中集成ibatis(不是mybatis),发现已经不在支持SqlmapClientTemplate和SqlmapClientFactoryBean,于是搞了这个工具jar来进行支持如下配置 ...
ibatis demo,ibatis例子,ibatis示例
iBATIS 级联iBATIS 级联iBATIS 级联
ibatis
书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。《iBATIS实战》的最后给出了一个设计优雅、层次清晰的示例程序JGameStore,该...
ibatis缓存技术详解,详细讲述了ibaits缓存应用于实现。
ibatis的原码 ibatis源码 ibatis源码 ibatis源码
ibatis 一对多关系映射 ibatis 一对多关系映射ibatis 一对多关系映射
Ibatis3,手册,Ibatis3手册,Ibatis3使用手册,Ibatis3参考手册
ibatis api,ibatis文档,ibatis说明文档
ibatis代码自动生成,ibatis代码自动生成,ibatis代码自动生成,ibatis代码自动生成
ibatis教程,ibatis帮助文档,ibatis学习入门
简单的Ibatis入门例子,让你踏入Ibatis大门
ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南
ibatis配置多表关联(一对一、一对多、多对多
一份非常详细的讲解文档,从建表到Ibatis配置文件,再到dao代码全部都有
iBatis文档\ibatis.doc