论坛首页 Java企业应用论坛

如何能在多个web服务器1个DB的情况下保证数据唯一?

浏览 15602 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-08-09  
唯一索引。。。。
1 请登录后投票
   发表时间:2009-08-09  
乐观锁,版本号。参考hibernate实现
0 请登录后投票
   发表时间:2009-08-09  
交给数据库。。。设计好数据库的数据规范就行
0 请登录后投票
   发表时间:2009-08-09  
到是锁了 不过就是慢啊
0 请登录后投票
   发表时间: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自动生成,这样好像不能控制数据唯一吧?


直接往数据库里面插数据,加个时间字段,精确到毫秒级就差不多了,取最新的那个时间字段的行
0 请登录后投票
   发表时间:2009-08-09  
做一个数据库操作锁,方法调用前都要取锁,取到锁的才用执行,否则等待,这个锁可以放在缓存服务器中,集群中的所有节点连上这台缓存服务器
1 请登录后投票
   发表时间:2009-08-09  
并发操作概率不大的话用乐观锁就可以了。
0 请登录后投票
   发表时间:2009-08-09  
感觉这就和以前C/S一样。
直接用数据库建立唯一性索引就可以解决,应用只需要处理好异常就可以了。期望Web应用来实现的话,太麻烦而且不一定可靠。
0 请登录后投票
   发表时间:2009-08-09  
悲观锁 or  乐观锁, 悲观锁用在必发比较少的情况, 可以不用修改现有的数据库,
乐观锁 用于 并发相对较多的情况, 需要加一个version 字段
0 请登录后投票
   发表时间:2009-08-09  
修改的时候where里面带上修改前的值,如:

update table set attr1='a2',attr2='b2' where attr1='a1' and attr2='b2'
0 请登录后投票
论坛首页 Java企业应用版

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