锁定老帖子 主题:多人操作数据的处理策略--讨论
精华帖 (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 我们目前策略如下: 对订单管理,很多工作人员都可以载入订单 特殊处理这个操作数据库的方法,设置一个字段--是否可用 可用才执行操作,操作的适合先把这个字段设为不可用 欢迎大家提出好的想法 ---------------- 非常谢谢大家的回复,第六页的 不知云 给出了很好的解决策略 大家可以看看 这贴就结了吧 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-05-24
1: int executeUpdate()
你不用返回值么? 2: 原子操作:先查询,后更新。 建议用int executeUpdate()。 PS:where后面最好加时间戳判断,避免多人同时更新数据。 |
|
返回顶楼 | |
发表时间:2011-05-24
NanguoCoffee 写道 1: int executeUpdate()
你不用返回值么? 2: 原子操作:先查询,后更新。 建议用int executeUpdate()。 PS:where后面最好加时间戳判断,避免多人同时更新数据。 返回值这个考虑过,但是返回值只能判断最后的操作失败了,不能在点击对订单提出处理的时候发现别人正在处理这个订单 不过这个可以在多个线程提出要对同一个订单操作时候,更新字段中是否可用,更新成功的进入操作,失败就给出提醒,已经有人操作这个了 |
|
返回顶楼 | |
发表时间:2011-05-24
我现在是这么处理的,同时只有一个客服人员能看到这条记录,当他点那其他页面或者退出时(seesion过期),释放这些记录,这时这些记录可以让别人访问
|
|
返回顶楼 | |
发表时间:2011-05-24
rocketball 写道 我现在是这么处理的,同时只有一个客服人员能看到这条记录,当他点那其他页面或者退出时(seesion过期),释放这些记录,这时这些记录可以让别人访问
哥们能给讲解具体点,session怎么做,同时多个点击出发事件的时候,怎么判断 |
|
返回顶楼 | |
发表时间:2011-05-24
悲剧了 写道 NanguoCoffee 写道 1: int executeUpdate()
你不用返回值么? 2: 原子操作:先查询,后更新。 建议用int executeUpdate()。 PS:where后面最好加时间戳判断,避免多人同时更新数据。 返回值这个考虑过,但是返回值只能判断最后的操作失败了,不能在点击对订单提出处理的时候发现别人正在处理这个订单 不过这个可以在多个线程提出要对同一个订单操作时候,更新字段中是否可用,更新成功的进入操作,失败就给出提醒,已经有人操作这个了 没看 PS的那段? 时间戳作为版本校验,就能解决了。 |
|
返回顶楼 | |
发表时间:2011-05-24
悲剧了 写道 rocketball 写道 我现在是这么处理的,同时只有一个客服人员能看到这条记录,当他点那其他页面或者退出时(seesion过期),释放这些记录,这时这些记录可以让别人访问
哥们能给讲解具体点,session怎么做,同时多个点击出发事件的时候,怎么判断 不知道跟你的应用场景是不是一样,我们也是一个审核后台,但是只有一台服务器。只同步的话在获取这些记录ID的地方做一个同步就OK了。session的话有一个HttpSessionListener会触发session创建或者销毁 |
|
返回顶楼 | |
发表时间:2011-05-24
小盆友们不用争了,先查询,加上乐观锁不就OK了。
|
|
返回顶楼 | |
发表时间:2011-05-24
乐观锁,悲观锁
|
|
返回顶楼 | |
发表时间:2011-05-24
这就要看你有没有开事务了.
如果没事务,你在真正发出sql语句更新之前再查一遍,如果发现数据不存在就提示用户.否则就更新掉. 只要并发不是很大就没问题. |
|
返回顶楼 | |