论坛首页 Java企业应用论坛

[讨论]在论坛中使用iBatis——缓存及分页

浏览 16144 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-10-04  
最近要写个论坛,打算用iBatis,想讨论一下性能优化。

只在论坛中最常用的操作上讨论:列出主题列表,列出帖子内容,发新主题,回复主题

有几个问题想请教一下:
1.如何更有效的设置缓存
iBatis的缓存跟statementId有关,跟parameterClass也有关,但是缓存的更新只与statementId有关。我希望这样,当postTopic后,只清除跟这个主题有关的回复,下次重新查询,或者更新缓存以与数据库同步,我觉得iBatis的缓存做不到这点,是不是只能自己实现?
2.分页和缓存如何配合
假设是mysql,自己写分页查询limit start,offset,并把start和offset作为参数,并在查询上设置缓存,此缓存在有新主题发布时清空。这样做的话,假设原来是100条,每页10条,分10页,新加一条主题,原有的10页都会清空,这个还可以接受。如果仅仅是修改了其中一条主题,也不得不清空全部主题缓存,总觉得不太顺心。

iBatis的缓存是否可以设置得更细一些?

谢谢
   发表时间:2006-10-08  
用ibatis自带的缓存支持,不一定能满足你的要求!
建议自己做cache!比如ehcache做数据缓存,oscache做页面缓存!
0 请登录后投票
   发表时间:2006-10-10  
说说容易做以来麻烦
0 请登录后投票
   发表时间:2006-10-26  
我现在也遇到分页的问题啊! 我现在是把MYSQL的limit写成一个被<include refid="pageSQL">的形式 在需要翻页的sql语句中包含进来。同时在写一个通用的含有start,offset两个key的MAP对象最为翻页查询的公共baseParameterMap。翻页的问题是可以解决了,可翻页前的记录数统计还是无法解决。

我还尝试了另一种方法 写个baseParameterClass
BaseParameter{
  private int start;
  private int offset;
  private Object param;

  .........
}

这个类作为翻页功能入参基类,实际的参数设置到param成员中去,SQL中的参数配置为#param.XXXX#。执行时竟然报Object对象不包含getXXX方法,我狂晕。连自动检测Object的实际类型都没有。
0 请登录后投票
   发表时间:2006-10-26  
做起来麻烦,难道就不做了吗?
0 请登录后投票
   发表时间:2006-10-27  
luming711115 写道
我现在也遇到分页的问题啊! 我现在是把MYSQL的limit写成一个被<include refid="pageSQL">的形式 在需要翻页的sql语句中包含进来。同时在写一个通用的含有start,offset两个key的MAP对象最为翻页查询的公共baseParameterMap。翻页的问题是可以解决了,可翻页前的记录数统计还是无法解决。

我还尝试了另一种方法 写个baseParameterClass
BaseParameter{
  private int start;
  private int offset;
  private Object param;

  .........
}

这个类作为翻页功能入参基类,实际的参数设置到param成员中去,SQL中的参数配置为#param.XXXX#。执行时竟然报Object对象不包含getXXX方法,我狂晕。连自动检测Object的实际类型都没有。


"可翻页前的记录数统计还是无法解决"一般这个总数,我们是通过select count(*) from table与查找记录相同条件的得出一个记录总数后,传入给现在的分页函数的!
0 请登录后投票
   发表时间:2006-11-08  
[quote="edusaj
"可翻页前的记录数统计还是无法解决"一般这个总数,我们是通过select count(*) from table与查找记录相同条件的得出一个记录总数后,传入给现在的分页函数的!

这样做意味着每个需要进行翻页的SQL语句都有一个对应的select count(*) from table的配置,这样的配置量大的吓人(实际应用中翻页的SQL语句是非常多的)。其实计算总记录数这些SQL完全可以做成模板,有很多人想直接取itabis中配置的sql语句就是这个原因(可惜目前没有有效的方法)。
0 请登录后投票
   发表时间:2006-11-08  
使用缓存,首先要清楚什么样的数据适合放入Cache中?通常是更新不频繁,访问量高,命中率高的适合放入Cache中,这就和我们的商业逻辑相关。
根据我们的经验,直接使用ibatis自己的缓存,从缓存的粒度和灵活性上都不高,所以不建议使用ibatis自带的缓
0 请登录后投票
   发表时间:2006-11-09  
yangzheng 写道
使用缓存,首先要清楚什么样的数据适合放入Cache中?通常是更新不频繁,访问量高,命中率高的适合放入Cache中,这就和我们的商业逻辑相关。
根据我们的经验,直接使用ibatis自己的缓存,从缓存的粒度和灵活性上都不高,所以不建议使用ibatis自带的缓


确实如此。所以才需要根据实际情况写针对应用的缓存

不知道hibernate和ActiveRecord是否也需要如此
0 请登录后投票
   发表时间:2006-11-13  
luming711115 写道
[quote="edusaj
"可翻页前的记录数统计还是无法解决"一般这个总数,我们是通过select count(*) from table与查找记录相同条件的得出一个记录总数后,传入给现在的分页函数的!

这样做意味着每个需要进行翻页的SQL语句都有一个对应的select count(*) from table的配置,这样的配置量大的吓人(实际应用中翻页的SQL语句是非常多的)。其实计算总记录数这些SQL完全可以做成模板,有很多人想直接取itabis中配置的sql语句就是这个原因(可惜目前没有有效的方法)。


这些SQL完全可以做成模板,指的什么?有大概模型吗?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics