该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-08-09
唯一索引。。。。
|
|
返回顶楼 | |
发表时间:2009-08-09
乐观锁,版本号。参考hibernate实现
|
|
返回顶楼 | |
发表时间:2009-08-09
交给数据库。。。设计好数据库的数据规范就行
|
|
返回顶楼 | |
发表时间:2009-08-09
到是锁了 不过就是慢啊
|
|
返回顶楼 | |
发表时间:2009-08-09
by5739 写道 rain2005 写道 by5739 写道 rain2005 写道 可以在数据库里面建一个版本行。。。
如果提交a或者b就更新版本行 建版本好像不能解决问题啊,不管有没版本,都要先查询数据库有没有记录才能决定是插入还是不插入(或者更新),但是这个2个动作之间要是被人抢先插入,就会出问题 所以说才加个版本行啊,提交是看版本有没有变化撒,如果版本行版本发生变化就会滚事务,不是很easy的事么? 不太明白啊。。。比如顺序是这样的: a服务器检查DB发现没有数据 b服务器检查DB发现没有数据 b服务器插入版本为1,id=1的数据 a服务器插入版本为1,id=2的数据 id是db自动生成,这样好像不能控制数据唯一吧? 直接往数据库里面插数据,加个时间字段,精确到毫秒级就差不多了,取最新的那个时间字段的行 |
|
返回顶楼 | |
发表时间:2009-08-09
做一个数据库操作锁,方法调用前都要取锁,取到锁的才用执行,否则等待,这个锁可以放在缓存服务器中,集群中的所有节点连上这台缓存服务器
|
|
返回顶楼 | |
发表时间:2009-08-09
并发操作概率不大的话用乐观锁就可以了。
|
|
返回顶楼 | |
发表时间:2009-08-09
感觉这就和以前C/S一样。
直接用数据库建立唯一性索引就可以解决,应用只需要处理好异常就可以了。期望Web应用来实现的话,太麻烦而且不一定可靠。 |
|
返回顶楼 | |
发表时间:2009-08-09
悲观锁 or 乐观锁, 悲观锁用在必发比较少的情况, 可以不用修改现有的数据库,
乐观锁 用于 并发相对较多的情况, 需要加一个version 字段 |
|
返回顶楼 | |
发表时间:2009-08-09
修改的时候where里面带上修改前的值,如:
update table set attr1='a2',attr2='b2' where attr1='a1' and attr2='b2' |
|
返回顶楼 | |