论坛首页 Java企业应用论坛

多人操作数据的处理策略--讨论

浏览 18372 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-05-24   最后修改:2011-05-29
用户故事如下:

电子商务后台管理,有多个客服人员可以操作同一个数据,当有的人正在对他进行修改的时候,其他人却觉得这个数据是垃圾数据,就直接删除了

如果是你,你在项目中如何处理这一小细节。

比如:当你载入订单修改的适合,有人已经把订单删除了,你去保存,不会有任何错误,反而操作成功

可以去数据库更新一个id不存在的字段,没有任何问题,只会
update  qqinfo set name='fdfd
' where id=90;

Query OK, 0 rows affected
Rows matched: 0  Changed: 0  Warnings: 0


我们目前策略如下:

对订单管理,很多工作人员都可以载入订单

特殊处理这个操作数据库的方法,设置一个字段--是否可用

可用才执行操作,操作的适合先把这个字段设为不可用

欢迎大家提出好的想法


----------------

非常谢谢大家的回复,第六页的 不知云 给出了很好的解决策略 大家可以看看

这贴就结了吧
   发表时间:2011-05-24  
1: int executeUpdate()
你不用返回值么?

2: 原子操作:先查询,后更新。

建议用int executeUpdate()。
PS:where后面最好加时间戳判断,避免多人同时更新数据。
0 请登录后投票
   发表时间:2011-05-24  
NanguoCoffee 写道
1: int executeUpdate()
你不用返回值么?

2: 原子操作:先查询,后更新。

建议用int executeUpdate()。
PS:where后面最好加时间戳判断,避免多人同时更新数据。



返回值这个考虑过,但是返回值只能判断最后的操作失败了,不能在点击对订单提出处理的时候发现别人正在处理这个订单

不过这个可以在多个线程提出要对同一个订单操作时候,更新字段中是否可用,更新成功的进入操作,失败就给出提醒,已经有人操作这个了

0 请登录后投票
   发表时间:2011-05-24  
我现在是这么处理的,同时只有一个客服人员能看到这条记录,当他点那其他页面或者退出时(seesion过期),释放这些记录,这时这些记录可以让别人访问
0 请登录后投票
   发表时间:2011-05-24  
rocketball 写道
我现在是这么处理的,同时只有一个客服人员能看到这条记录,当他点那其他页面或者退出时(seesion过期),释放这些记录,这时这些记录可以让别人访问



哥们能给讲解具体点,session怎么做,同时多个点击出发事件的时候,怎么判断


0 请登录后投票
   发表时间:2011-05-24  
悲剧了 写道
NanguoCoffee 写道
1: int executeUpdate()
你不用返回值么?

2: 原子操作:先查询,后更新。

建议用int executeUpdate()。
PS:where后面最好加时间戳判断,避免多人同时更新数据。



返回值这个考虑过,但是返回值只能判断最后的操作失败了,不能在点击对订单提出处理的时候发现别人正在处理这个订单

不过这个可以在多个线程提出要对同一个订单操作时候,更新字段中是否可用,更新成功的进入操作,失败就给出提醒,已经有人操作这个了



没看 PS的那段?
时间戳作为版本校验,就能解决了。
0 请登录后投票
   发表时间:2011-05-24  
悲剧了 写道
rocketball 写道
我现在是这么处理的,同时只有一个客服人员能看到这条记录,当他点那其他页面或者退出时(seesion过期),释放这些记录,这时这些记录可以让别人访问



哥们能给讲解具体点,session怎么做,同时多个点击出发事件的时候,怎么判断



不知道跟你的应用场景是不是一样,我们也是一个审核后台,但是只有一台服务器。只同步的话在获取这些记录ID的地方做一个同步就OK了。session的话有一个HttpSessionListener会触发session创建或者销毁
0 请登录后投票
   发表时间:2011-05-24  
小盆友们不用争了,先查询,加上乐观锁不就OK了。
0 请登录后投票
   发表时间:2011-05-24  
乐观锁,悲观锁
0 请登录后投票
   发表时间:2011-05-24  
这就要看你有没有开事务了.
如果没事务,你在真正发出sql语句更新之前再查一遍,如果发现数据不存在就提示用户.否则就更新掉.
只要并发不是很大就没问题.
0 请登录后投票
论坛首页 Java企业应用版

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