发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA

请banq老师回复:getPageIterator与findModelByKey的效率

2005-08-08 10:08
赞助商链接

你好,banq老师。我正在学习你的JdonFramework,并试着开发一些小东西。在ModelAction中通常要实现getPageIterator和findModelByKey方法。getPageIterator只是包装了满足搜索条件的数据记录的主键key,而为了获得每一条记录的内容,我要用findModelByKey方法,以key为参数,每次执行newsManager.getNewsType((String) key)。而执行此方法,每次都要执行select * from T_NEWS_TYPE where typeid = ?这句sql语句。
而我们知道,每次执行sql语句的系统开销都是很大的。select * from T_NEWS_TYPE where 搜索条件.... 的效率比执行N句select * from T_NEWS_TYPE where typeid = ? 要高出不知几个数量级。
不知我考虑的对不对,如果是这样,我们该如何提高这个瓶颈呢?
请banq老师回复。谢谢。

2005-08-08 20:31

你的问题很好,主要是这句:
"每次执行newsManager.getNewsType((String) key)。而执行此方法,每次都要执行select * from T_NEWS_TYPE where typeid = ?这句sql语句。"

其实不然,因为Jdon的缓存拦截器缘故,当调用newsManager.getNewsType((String) key)时,实际会激活缓存拦截器,缓存拦截器从缓存中查询NewsType实例,如有从缓存中返回,因此不会每次都会到后台执行SQL语句的,你可以通过日志输出证实一下。

2005-08-08 21:46

谢谢banq老师的回答,应该就是指下面的方法了。

//首先从缓存中获取
ModelKey modelKey = new ModelKey(dataKey, modelClass);
model = modelManager.getCache(modelKey);
if (model == null) {
model = fetchModel(request, dataKey);

2005-08-10 21:19

不是,你指出的代码也是一种缓存使用,这样做好处,是降低向后台调用的频率,这种方法只适用一些框架内预定的功能;作为拾遗补阙,在向后台调用时,还将激活缓存拦截器。

为什么不直接暴露缓存拦截器主要是从性能角度考虑。

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com