`
悲剧了
  • 浏览: 144325 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多
用户故事如下:

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

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

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

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

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


我们目前策略如下:

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

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

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

欢迎大家提出好的想法


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

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

这贴就结了吧
分享到:
评论
16 楼 luckyhqh 2011-05-24  
1.表中增加 版本号或者最后更新时间(如果增加最后更新者,如果有冲突时可以有更好的用户提示)
2.读取数据时把版本号或者最后更新时间一起读取下来,
3.操作数据时比较版本号或者最后更新时间,如果一致,才能操作数据,更新数据时需要更新版本号或者最后更新时间。
4.删除采用伦理删除,表中增加一个删除标志。删除时更新标志即可,同时也需要需要更新版本号或者最后更新时间。
5.有更新数据时,请主要先在开始时把需要更新的数据进行锁定操作。
简单的想了下,暂时想到了上面的这些。
扩充话题:如果数据只能让一个用户操作。
  在数据中增加一个是否被读取的标志? 如果有读取标志的用户最后异常退出,没有更新回读取的标志的话,该如何处理? 或者采用别的什么方法呢? 
15 楼 chinacool_main 2011-05-24  
在数据更新操作之前,再次查询表的时间戳,与前次查询结果进行比较,一致的情况下,进行更新操作。不一致的情况,说明数据状态已经更改,要报信息给终端用户,更新数据!
14 楼 szcs10138456 2011-05-24  
rocketball 写道
szcs10138456 写道
小盆友们不用争了,先查询,加上乐观锁不就OK了。

这压根不是这个问题,主要是考虑后台操作人员工作重复,人家是通过这个统计工作量的

我表示鸭梨很大。。。。。。我不懂。
13 楼 treemap 2011-05-24  
乐观锁
加上 时间字段 or  版本号
12 楼 iday 2011-05-24  
记录操作日志么。
11 楼 cywhoyi 2011-05-24  
使用乐观锁解决方案,可以用版本号、时间戳,让用户自己处理!
10 楼 rocketball 2011-05-24  
szcs10138456 写道
小盆友们不用争了,先查询,加上乐观锁不就OK了。

这压根不是这个问题,主要是考虑后台操作人员工作重复,人家是通过这个统计工作量的
9 楼 Sunny_kaka 2011-05-24  
这就要看你有没有开事务了.
如果没事务,你在真正发出sql语句更新之前再查一遍,如果发现数据不存在就提示用户.否则就更新掉.
只要并发不是很大就没问题.
8 楼 kimmking 2011-05-24  
乐观锁,悲观锁
7 楼 szcs10138456 2011-05-24  
小盆友们不用争了,先查询,加上乐观锁不就OK了。
6 楼 rocketball 2011-05-24  
悲剧了 写道
rocketball 写道
我现在是这么处理的,同时只有一个客服人员能看到这条记录,当他点那其他页面或者退出时(seesion过期),释放这些记录,这时这些记录可以让别人访问



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



不知道跟你的应用场景是不是一样,我们也是一个审核后台,但是只有一台服务器。只同步的话在获取这些记录ID的地方做一个同步就OK了。session的话有一个HttpSessionListener会触发session创建或者销毁
5 楼 NanguoCoffee 2011-05-24  
悲剧了 写道
NanguoCoffee 写道
1: int executeUpdate()
你不用返回值么?

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

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



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

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



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



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


3 楼 rocketball 2011-05-24  
我现在是这么处理的,同时只有一个客服人员能看到这条记录,当他点那其他页面或者退出时(seesion过期),释放这些记录,这时这些记录可以让别人访问
2 楼 悲剧了 2011-05-24  
NanguoCoffee 写道
1: int executeUpdate()
你不用返回值么?

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

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



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

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

1 楼 NanguoCoffee 2011-05-24  
1: int executeUpdate()
你不用返回值么?

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

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

相关推荐

    网络多人游戏架构与编程Multiplayer Game Programming-Architecting Networked Game.pdf

    3. **服务器架构**:多人游戏通常采用客户端-服务器架构,书中会讨论单服务器、多服务器、分布式服务器等模式,以及负载均衡、故障转移和扩展性的实现方法。 4. **游戏逻辑与状态管理**:处理玩家行为和游戏世界的...

    大型多人在线游戏设计

    通过上述讨论,我们可以看出大型多人在线游戏设计中的持久化策略是一个复杂但至关重要的领域。正确的策略不仅可以保护玩家的数据不被丢失,还能提高游戏的整体性能,为玩家创造更加流畅和丰富的游戏体验。

    多人聊天软件

    4. **语音与视频通话**:多人聊天软件往往集成语音和视频通话功能,这需要高质量的音频编码/解码技术(如Opus或AAC)和视频编码/解码技术(如H.264或VP9),以及网络适应策略来处理不同网络条件下的流畅通信。...

    大型多人在线游戏开发,大型多人在线游戏开发 pdf,C,C++

    开发者需要考虑服务器的分布式部署、负载均衡、数据同步策略(如时间切片、延迟同步等)以及如何处理玩家间的交互。 3. **客户端与服务器通信**:游戏客户端和服务器之间的通信协议是关键,通常使用TCP/IP协议栈,...

    网络多人游戏架构与编程.pdf&源码

    2. **同步机制**:介绍各种同步策略,如锁步同步、基于状态机的同步、时间戳同步等,以及它们在处理玩家操作延迟和网络抖动中的应用。 3. **服务器架构**:讨论不同类型的服务器架构,如主从服务器模型、P2P(对等...

    电信设备-多人使用的个人信息系统.zip

    此外,资料可能还讨论了故障恢复和灾难备份方案,以确保即使在系统故障或自然灾害情况下,用户的个人数据也能得到保护。这通常需要定期备份和冗余存储策略。 最后,安全性更新和维护策略不容忽视。面对不断演变的...

    基于Unity3D的网络多人对战策略游戏的开发与实.doc

    本文主要讨论了使用 Unity3D 开发基于网络的多人策略放置类型游戏的实际开发过程,涵盖了游戏客户端和服务端的开发、网络连接和信息交流的原理与方法、游戏热更新和游戏打包与功能测试等方面的知识点。 一、游戏...

    网络游戏-单向网络中进行数据广播的方法.zip

    通过理解网络特性和选择合适的通信协议,配合高效的数据处理策略和优化技术,可以在保证游戏体验的同时,有效管理网络资源。对于开发者来说,不断探索和实践,才能在单向网络环境中实现最佳的数据广播效果。

    多人在线聊天系统源码 xmpp+openfire

    在设计上,需要考虑用户体验,如消息的实时性、数据同步以及离线消息的处理。 **私聊和建房分组聊:** 在多人聊天系统中,私聊是指两个用户之间的个人对话,而建房分组聊则涉及创建一个聊天室,允许多个人参与讨论...

    网络游戏-具有光纤网络功能的数据处理装置.zip

    在多人在线游戏中,大量的用户同时交互,需要快速交换大量数据,光纤网络能有效降低延迟,使得游戏过程更加流畅,提高玩家的沉浸感。 数据处理装置是网络游戏系统的核心部分,它负责接收、处理和发送游戏数据。具备...

    asp.net 长连接的聊天室(多人房间)

    ASP.NET长连接的聊天室是一种实现高实时性的在线交流平台,尤其适合于多人参与的讨论环境。这种聊天室的核心技术是Comet,一种用于创建服务器推送(Server-Sent Events)的编程模型,允许服务器主动向客户端发送数据...

    毕业设计(论文)-基于JAVA的多人聊天室设计.doc

    4.3 安全性实现:介绍加密算法和安全策略,确保用户数据的安全传输和存储。 第 5 章 系统测试与优化 5.1 测试方法:列出系统测试的主要步骤,包括功能测试、性能测试、安全性测试等。 5.2 问题发现与解决:分析...

    电信设备-基于无线通信传输技术的VR多人互动系统.zip

    同时,可能会涵盖如何处理多人互动时的数据同步和网络协调问题。 【标签】为“资料”,意味着包含的文件可能是研究报告、技术文档、教程或案例分析,提供关于该主题的深入信息。 【压缩包子文件的文件名称列表】中...

    ASP.NET做的多人聊天室,无刷新

    在这个场景中,我们讨论的是一个使用ASP.NET技术实现的多人聊天室,它利用了Ajax(Asynchronous JavaScript and XML)技术来实现页面无刷新通信,提高了用户体验。在传统的Web应用中,每次用户交互都可能导致整个...

    LINQ 数据的更新,插入、删除、批量更新

    本篇文章将详细探讨如何使用LINQ进行数据的更新、插入、删除以及批量更新操作,并特别关注在多人同时修改同一条数据时如何处理冲突,以及如何通过错误处理策略来确保更新的连续性。 首先,我们来看如何使用LINQ进行...

    搭建浏览器多人测试平台并进行nagios监控

    标题 "搭建浏览器多人测试平台并进行nagios监控" 暗示了本文将讨论如何构建一个支持多用户同时测试的浏览器环境,并结合Nagios系统进行监控,以确保服务的稳定性和可用性。Nagios是一款开源的网络监控系统,能够实时...

    网络游戏-基于云网络的多人互动学习方法及系统.zip

    《网络游戏-基于云网络的多人互动学习方法及系统》是一个深度探讨如何利用现代技术改进教育方式的专题。在这个数字化时代,网络游戏与云网络的结合为教育领域带来了革命性的变革,尤其是对于多人互动学习方面。本...

    数据开发基础知识点-1.docx

    本篇主要讨论了三种不同的数据提交模式:主键提交(upWhereKeyOnly)、主键加改变字段提交(upWhereChanged)以及主键加数据集其他字段提交(upWhereAll)。这些模式在Query和DSP组件的updateMode属性中进行设置,每...

Global site tag (gtag.js) - Google Analytics