锁定老帖子 主题:多个客户端连接同一套数据,怎样防止同时更新
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-12-25
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-12-26
如果对并发响应要求不高的话,对修改的数据line 加lock,可以严格保证数据库互斥更新操作。
|
|
返回顶楼 | |
发表时间:2012-12-26
使用悲观锁,任何在代码层面的解决方式都是无效的。因为是在不同jvm中
|
|
返回顶楼 | |
发表时间:2012-12-26
cectsky 写道 如果对并发响应要求不高的话,对修改的数据line 加lock,可以严格保证数据库互斥更新操作。
怎么加呢? |
|
返回顶楼 | |
发表时间:2012-12-26
hyneng 写道 cectsky 写道 如果对并发响应要求不高的话,对修改的数据line 加lock,可以严格保证数据库互斥更新操作。
怎么加呢? For example: If you want to modify select name from test_table where id=100002, you just to change it to "select name from test_table where id=100002 for update" now you can update and before you commit, other client can not touch this data |
|
返回顶楼 | |
发表时间:2012-12-26
cectsky 写道 hyneng 写道 cectsky 写道 如果对并发响应要求不高的话,对修改的数据line 加lock,可以严格保证数据库互斥更新操作。
怎么加呢? For example: If you want to modify select name from test_table where id=100002, you just to change it to "select name from test_table where id=100002 for update" now you can update and before you commit, other client can not touch this data 好,我试试 |
|
返回顶楼 | |
发表时间:2012-12-26
"select name from test_table where id=100002 for update"
不是单纯加这么一句话就行了, 我们来分析一下整个动作, 首先用户看到一张表,对应query()方法,方法里面是select ... 这一步没问题 然后就有两个分支: 1.用户点击一条记录 对应getrow()方法,对应select ... for update 然后修改之后确认,对应update()方法,对应update ... 2.或者直接之后,select ... fro update + update ... 如果是第一种,那么两个方法必须同时持用同一个连接,且不能中断回收关闭。 第二种,达不到真正的锁定目标,因为发生在一瞬间。 |
|
返回顶楼 | |
发表时间:2012-12-26
使用分布式锁呀
|
|
返回顶楼 | |
发表时间:2012-12-26
读取远大于写入,请用乐观锁;
基本为写入,用悲观锁。 如果数据库资源是集中的,没有拆分,为什么要用分布式锁,好玩? |
|
返回顶楼 | |
发表时间:2012-12-26
Shen.Yiyang 写道 读取远大于写入,请用乐观锁;
基本为写入,用悲观锁。 如果数据库资源是集中的,没有拆分,为什么要用分布式锁,好玩? 因为是分布式的应用啊 |
|
返回顶楼 | |