关键字:查询,事务,粒度
[size=medium]/**
*作者:张荣华
*日期:2008-08-22
**/
在那遥远的过去,俺曾经写过一篇关于事务的文章,原文地址见: http://ahuaxuan.iteye.com/blog/95124.文章大意是这样的:在spring+hibernate的场景下,readonly的事务会有特别的优化.因为readonly的事务在提交的时候不会flush 一级缓存中的几个队列(包括,更新队列,插入队列等).看了那篇文章的同学会以为:ok,只读的时候我只要readonly就行了. 不过那篇文章中我并没有考虑到所有的场景,所有再写一篇文章,算是对整个概念(查询操作是否需要事务)的一个完善.
还是老路子,我先描述一下我遇到的一个项目的问题:
1 代码逻辑,下面是一段伪代码
你的理解是正确的
不过是否需要加锁看业务来决定,其实在本文章的这个场景中,即使在方法上加锁也没有多大影响,因为资源竞争的情况很少.
如果是资源竞争很厉害我们还可以使用双重检查
-----------------------------------------------------
cuiyi.crazy 写道而你在开贴的结论中提到
ahuaxuan 写道
而这个方法只有o1 == null的时候才会被调用,绝大多数情况下它是不会被调用的.这样既一定程度上保证了事务又提高的程序的速度.
实际上所说的加锁,也是保证不多次读取数据库,而直接从缓存获得的一种保障;
这个connectoin耗尽的根本原因在cache中的命中率不高而导致
不好意思,到现在才仔细看你的回帖,
不过你还是错的,即使缓存命中率100%,还是需要用到connection,所以资源还是会耗尽,你再仔细想想吧. 51 楼 anonymity 2008-09-27 在spring的事务说明中,PROPAGATION_SUPPORTS是当前线程处于事务中则使用事务,否则不使用。不知道这个和楼主所说的线程、事务是否有关系。 52 楼 java55 2008-10-07 ahuaxuan 写道[size=medium]/**
就是这段代码,放到tomcat中,我的同事william测出来的结果是,单线程请求(tomcat的thread pool中在同一时间只有一个处理请求的线程被调用):ab -c 1 n 1000 http://xxxx.xxx.xxx/xxx
结果是每秒中只能处理20个请求, 我的天啊, 20个,改多线程呢,: ab -c 100 n 1000 http://xxxx.xxx.xxx/xxx, 一百个线程请求1000次,晕倒,还是每秒只能处理20多个请求
用ab这个命令进行的请求不会去真的执行代码吗?为什么我每次执行的print的信息都不显示出来呢?还有debug也没什么反应呢?