关于数据库的并发控制问题的争论!!--求各位高手评判
最近一公司在为我单位在B/S平台上做生产调度管理,平台是MySQL4.0+Java。在测试过程中我发现开发人员没有对数据的并发进行控制。即两个人同时修改一条记录时,两个人均可提交,且最后提交人的数据会复盖前面修改人的记录。
本人对此提出异议后,软件开发人员告之,用生产管理系统中的权限管理,就可解决并发控制的问题!!!
我从未听说过此类解决方案,为此我们还发生了激烈的争论,请各位高手发言谈谈这个问题。
------解决方案--------------------我觉得更新之前先check一下比较好.但人家说的也对,没有对应权限的角色是不能处理对应的数据信息的.
------解决方案--------------------数据库是一个共享资源,可以提供多个用户使用。这些用户程序可以一个一个地串行执行,每个时刻只有一个用户程序运行,执行对数据库的存取,其他用户程序必须等到这个用户程序结束以后方能对数据库存取。但是如果一个用户程序涉及大量数据的输入/输出交换,则数据库系统的大部分时间处于闲置状态。因此,为了充分利用数据库资源,发挥数据库共享资源的特点,应该允许多个用户并行地存取数据库。但这样就会产生多个用户程序并发存取同一数据的情况,若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性,所以数据库管理系统必须提供并发控制机制。并发控制机制的好坏是衡量一个数据库管理系统性能的重要标志之一。
DM用封锁机制来解决并发问题。它可以保证任何时候都可以有多个正在运行的用户程序,但是所有用户程序都在彼此完全隔离的环境中运行。
------解决方案--------------------这个问题,应该是处理事务的问题,个人觉得这个问题,还是看流程怎么设计~
------解决方案--------------------一般来说数据库的锁机制可以解决一般性的并发
当有用户修改数据,他就会产生一个互斥锁,这样别人就不能再修改,但可以查看
当然也可以人工给这些数据加锁,
------解决方案--------------------基本同意LZ的看法
这个问题只要测试一下就知道了,你建两个用户都赋予同样的权限,然后同时查看并先后修改同一条记录,看看是不是最后提交人的数据会复盖前面修改人的记录
对于B/S结构的程序一般采用乐观锁,也就是更新语句里面带版本号的方式来控制,如果发现记录已经被其它用户更新了,则需要提示当前用户
------解决方案--------------------软件开发的人说的不对,权限管理最多减少并发的可能性,但是不能杜绝;楼主可以让开发的去做个试验;
DM用封锁机制来解决并发问题。它可以保证任何时候都可以有多个正在运行的用户程序,但是所有用户程序都在彼此完全隔离的环境中运行。
------解决方案--------------------这个问题还是要看该开发人员所说的生产管理系统中的权限管理具体实现方案是什么。
或许我们孤陋寡闻了?
既然他能这么说,我相信他一定有他的道理,不大可能是敷衍你。
只是按照我们对B/S 和C/S构架编程体系的了解,是觉得在B/S结构下仅仅利用权限管理几乎几太可能。
毕竟在B/S下不是实时与数据库连接,无法实现实时判断。
或许可以在每个人访问该数据库后建立一个档案,当其中一人随后修改了数据,
则保存一变量,另外一人提交修改时判断是否在先前一人修改数据库前连接了数据库且可视化界面一直为先前界面。
如果为真,则拒绝再次提交修改。强制重新下载最新数据,提示其是否需要再修改。
------解决方案--------------------楼主在杞人忧天,
现实中只要实现权限控制就基本可以满足需求了
的确会存在并发问题,可惜的是这个问题出现的概率太小
而且就算出现,也并不会对系统的运行结果造成什么影响
要知道,如果要实现严格的并发解决方案,系统的吞吐量会降低很多
没必要为了满足那虚无缥缈的需求而去降低性能
当然,如果楼主是在电信,银行之类的部门,对数据要求很高
那就另当别论,一般生产性需求,根本就没那必要
顶多 实现乐观锁就OK了
------解决方案--------------------在该记录的表中加入最后更改时间的字段。
读取数据时,把最后更改时间作为更改表单的一部分(隐藏域,要更安全的话,使用session)。
提交更改时,把表中的对应记录的最后更改时间和提交过来的最后更改时间对比,如果发现时间不对,则提示该记录自从读取出来以后发生了更改。
------解决方案--------------------我觉得跟权限没什么关系,更多还是数据库并发中锁的问题。
------解决方案--------------------用生产管理系统中的权限管理,就可解决并发控制的问题!!!
这是什么东西?还没有听说过。
------解决方案--------------------“用生产管理系统中的权限管理,就可解决并发控制的问题!!! ”
这句话是屁话,可能说明这个问题他们解决不了或者代价非常大,所以用这句话来搪塞你。
------解决方案--------------------zqpsswh:
“楼主在杞人忧天,
现实中只要实现权限控制就基本可以满足需求了
的确会存在并发问题,可惜的是这个问题出现的概率太小
而且就算出现,也并不会对系统的运行结果造成什么影响”
这种说法存在根本性错误,“权限”与“并发”控制是完全不同的概念。
权限控制基本属于静态控制,是限制什么人可以读取、修改什么数据,是为了满足业务管理工作、管理流程中固有的限制所需要的。
并发控制属于动态控制,是为了保证数据完整性所必须的,是多用户、并发数据库管理系统基本的要求,是数据库管理系统、应用系统开发人员所必须考虑、实现的,对用户应该是透明的。
如果用户数量很少、外人接触不到系统、数据不是很敏感,权限控制是可以没有的;但只要存在不同的人同时存取相同的数据、不管概率有多小,为保证数据的完整性,并发控制都不可少,所谓“而且就算出现,也并不会对系统的运行结果造成什么影响”这种说法太不负责任,作为管理系统,不能保证数据的完整性,还有比这更严重的后果吗?特别是如果真的概率很小,这种系统对用户数据就是一个安全隐患(因为测试、试运行阶段可能根本发现不了问题)