锁定老帖子 主题:应用层缓存 VS ORM缓存
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-02
最近做一个比较大的电子商务项目,预计每天订单量将在5万多单,客服人员需要频繁的下单、查询订单、操作订单,客人预订完订单后,会立即进入处理流程,为了提高服务质量,要求流水化作业,平均要在40分钟-80分钟内处理完订单,对于疑难订单要到第二天,才能处理完。所以订单在创建后,会在短时间内,被频繁的修改和查看。 1.但由于中台每天在工作当中,频繁的批量分配工单, 2.由于工作人员在处理订单时,每一次查看之后,都有更新操作,在更新之后,订单被清除缓存,下一组人在处理订单时,又得重新LOAD,所以效果并不好。
由于整个模块最核心的商业对象就是订单,最后决定在Service层对订单开小灶,对订单缓存的单独的定制处理。 我觉得应用缓存存在以下优点: 缺点:
目前的方案是采用应用层的现代化,同时使用如Proxy模式来提供透明化的设计, IOrderService -》 OrderService -》 CacheableOrderService 通过Spring的Bean配置,一样可以实现透明化的操作。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-06-02
不要使用bulk update.使用jboss cache不要使用readwrite cache
|
|
返回顶楼 | |
发表时间:2007-06-02
可以用一下BDB做Cache,使用Quary定时将这些数据持久化到数据库.
可以提高很多的效率 |
|
返回顶楼 | |
发表时间:2007-06-02
这种应用场景下一次需要分配多少个任务,有必要用bulkUpdate这个难用的东东么?
引用 4。在更新数据库时,不是直接清除缓存,而是更新缓存(尽管这有风险),当业务层抛出异常时,才去清空缓存,避免由于频繁更新,而清空缓存。 在核心的订单模块写入缓存??难道你用的缓存支持事务隔离?不怕出人命啊... |
|
返回顶楼 | |
发表时间:2007-06-02
每天五萬筆資料, 算是小數目, 但
搞這麼多 ORM的東西了, 請問你們的機器多大? level 2 cache 吃多少memory? |
|
返回顶楼 | |
发表时间:2007-06-02
大型的电子商务系统不适合使用Hiberante这些持久层框架,
|
|
返回顶楼 | |
发表时间:2007-06-02
引用 因为要批量将订单分配给某一个工作人员处理,在代码当中执行了一个bulkUpdate的操作:
template.bulkUpdate("update order set owner = ? where id in (?, ?,?)"); 这时Hibernate会直接将Order对象的二级缓存清楚掉。 由于二级缓存,总是被刷掉,再查询时,需要重新从数据库Load,所以二级缓存变相直接起的作用很少 用bulkUpdate肯定要清除二级缓存了 否则会导致数据不一致 我觉得最好还是测试一下循环update和bulkUpdate这两者的性能, 在数据多和数据少的时候 差别有多大 然后结合项目实际情况决定用那种那种 在没有测试性能之前 盲目的优化不提倡 |
|
返回顶楼 | |
发表时间:2007-06-03
Readonly 写道 这种应用场景下一次需要分配多少个任务,有必要用bulkUpdate这个难用的东东么?
bulkUpdate 是spring封装的方法,真正调用的仍然是Hibernate的 query.executeUpdate(hsql);方法。 如果批量更新,又使用Hibernate, 请问用什么方法,hibernate可以明确的清楚发生更新影响的对象? 引用 在核心的订单模块写入缓存??难道你用的缓存支持事务隔离?不怕出人命啊... 应用层缓存,也就是缓存的行为发生应用层,事务是在DAO层完成的,这与事务隔离没有关系, 更新缓存,一定是在更新数据库成功之后,返回应用层,才进行的操作。 |
|
返回顶楼 | |
发表时间:2007-06-03
Lordaeron 写道 每天五萬筆資料, 算是小數目, 但
搞這麼多 ORM的東西了, 請問你們的機器多大? level 2 cache 吃多少memory? 一个订单在缓存中存活的生命周期,不超过80分钟,很快就被移出了。 5万笔是一天的总单量,在一个时刻,正在流转,尚没有结束的,同时存活在缓存中的订单不过几百个。 这点memory,如果应用服务器都吃不消,还做什么服务器。 |
|
返回顶楼 | |
发表时间:2007-06-03
知道是频繁更新的东西为什么要cache??
直接JDBC就好了. 如果坚持要OO style的话用上iBATIS. |
|
返回顶楼 | |