最近一公司在为我单位在B/S平台上做生产调度管理,平台是MySQL4.0+Java。在测试过程中我发现开发人员没有对数据的并发进行控制。即两个人同时修改一条记录时,两个人均可提交,且最后提交人的数据会复盖前面修改人的记录。
本人对此提出异议后,软件开发人员告之,用生产管理系统中的权限管理,就可解决并发控制的问题!!!
我从未听说过此类解决方案,为此我们还发生了激烈的争论,请各位高手发言谈谈这个问题。
本人对此提出异议后,软件开发人员告之,用生产管理系统中的权限管理,就可解决并发控制的问题!!!
我从未听说过此类解决方案,为此我们还发生了激烈的争论,请各位高手发言谈谈这个问题。
大家同意我的观点吗?
请各位高手发言谈谈这个问题,能否使用程序中的权限管理来避免并发的产生!!
权限管理没有从根本上避免并发产生
只是降低了并发产生的可能
而在B/S中,前台每次访问完数据库后,与数据库的连接就中断了。故在提交前需由前台程序进行相应判断。
而使用任何权限来限制用户的写操作(对同一条记录),从根本上是无法避免并发产生的!!!
而在B/S中,前台每次访问完数据库后,与数据库的连接就中断了。故在提交前需由前台程序进行相应判断。
C/S应用同样会有数据库并发控制的问题,与数据库连接是否中断无关而使用任何权限来限制用户的写操作(对同一条记录),从根本上是无法避免并发产生的!!!
同意这一条
http://topic.csdn.net/t/20010729/18/214531.html
或许我们孤陋寡闻了?
既然他能这么说,我相信他一定有他的道理,不大可能是敷衍你。只是按照我们对B/S 和C/S构架编程体系的了解,是觉得在B/S结构下仅仅利用权限管理几乎几太可能。
毕竟在B/S下不是实时与数据库连接,无法实现实时判断。
或许可以在每个人访问该数据库后建立一个档案,当其中一人随后修改了数据,
则保存一变量,另外一人提交修改时判断是否在先前一人修改数据库前连接了数据库且可视化界面一直为先前界面。
如果为真,则拒绝再次提交修改。强制重新下载最新数据,提示其是否需要再修改。
2.现在的系统中是允许同一用户反复登录系统的!例如用小张的帐户在A机登录时,别人也可使用他的帐户在B机、C机....登录。这样从根本上还是无法避免并发的产生!
3.还有上面提到的管理员并的问题!
1.大家在做MIS时是否对并发进行控制; 2.如果不进行控制,是否使用MIS里的权限管理就可以避免并发的产生。
读取数据时,把最后更改时间作为更改表单的一部分(隐藏域,要更安全的话,使用session)。
提交更改时,把表中的对应记录的最后更改时间和提交过来的最后更改时间对比,如果发现时间不对,则提示该记录自从读取出来以后发生了更改。
http://aspdemo.nseer.com/erp/home/logind.jsp
1.大家在做MIS时是否对并发进行控制;
答案是具体情况具体分析,军工企业的话,个人倾向于需要做2.如果不进行控制,是否使用MIS里的权限管理就可以避免并发的产生。
答案是不能避免(另外,faisun给出的方法就是乐观锁用时间戳的实现方法)
“楼主在杞人忧天, 现实中只要实现权限控制就基本可以满足需求了 的确会存在并发问题,可惜的是这个问题出现的概率太小 而且就算出现,也并不会对系统的运行结果造成什么影响”这种说法存在根本性错误,“权限”与“并发”控制是完全不同的概念。
权限控制基本属于静态控制,是限制什么人可以读取、修改什么数据,是为了满足业务管理工作、管理流程中固有的限制所需要的。
并发控制属于动态控制,是为了保证数据完整性所必须的,是多用户、并发数据库管理系统基本的要求,是数据库管理系统、应用系统开发人员所必须考虑、实现的,对用户应该是透明的。如果用户数量很少、外人接触不到系统、数据不是很敏感,权限控制是可以没有的;但只要存在不同的人同时存取相同的数据、不管概率有多小,为保证数据的完整性,并发控制都不可少,所谓“而且就算出现,也并不会对系统的运行结果造成什么影响”这种说法太不负责任,作为管理系统,不能保证数据的完整性,还有比这更严重的后果吗?特别是如果真的概率很小,这种系统对用户数据就是一个安全隐患(因为测试、试运行阶段可能根本发现不了问题)