首页 新闻 会员 周边 捐助

多用户同时读取一个数据的问题

0
悬赏园豆:10 [已解决问题] 解决于 2013-07-29 19:55

有一个obj对象,该对象同时被A  B C 三个用户浏览。

ABC都想要修改一下。现在A先修改完成了,B想修改提交。

现在的问题是A修改过后B没有刷新对象。B想在原有的基础上修改的。但是这个时候系统是在A修改过的基础上修改的。

请问下用什么技术能避免这种问题,让A修改后B刷新页面,或者提示数据过期问题。

越天的主页 越天 | 初学一级 | 园豆:8
提问于:2013-07-27 09:57
< >
分享
最佳答案
1

每一次修改都加上一个时间戳,然后第二个人修改的时候,先判断时间戳,不一致的话,就给出提示~

收获园豆:8
幻天芒 | 高人七级 |园豆:37207 | 2013-07-27 11:08

我也是这么想的,但是是网页。我说把时间放在隐藏的html的代码里,提交的时候把时间一起提交。我们经理希望有更好的办法。

越天 | 园豆:8 (初学一级) | 2013-07-27 15:27

@越天: 时间戳是数据库的一个字段...

隐藏在html代码,是不行的,因为这个时间不能标注记录是否被修改~

幻天芒 | 园豆:37207 (高人七级) | 2013-07-27 15:58

@幻天芒: 可是对象如果是一个从数据库中取的集合呢?

越天 | 园豆:8 (初学一级) | 2013-07-28 19:46

@越天: 每个集合对象一个时间戳呗。

幻天芒 | 园豆:37207 (高人七级) | 2013-07-28 22:53
其他回答(5)
0

或者你加个排他锁,这样保证数据的统一性,防止出现脏数据

flyjonson | 园豆:103 (初学一级) | 2013-07-27 11:21

有时间上的差异,比如说A修改完成后N分钟B才提交修改?在这N分钟之内又有人获取了这个数据。

请问下这个排他索如何使用?

支持(0) 反对(0) 越天 | 园豆:8 (初学一级) | 2013-07-27 15:29
0

有点像svn的工作原理。

angelshelter | 园豆:9914 (大侠五级) | 2013-07-27 11:32

SVN的工作原理是?

支持(0) 反对(0) 越天 | 园豆:8 (初学一级) | 2013-07-27 15:28

@越天: 你没有用svn吗?它是基于版本控制的。比如你和他都下了同一个文档是5.0的,他先修改提交后,svn的版本变为5.1 然后你想提交在5.0基础上修改的版本是提交不上的,如果提交上了,一定会覆盖别的人代码,你只能下最新的版本,再在最新版本上加自己的内容。

支持(0) 反对(0) angelshelter | 园豆:9914 (大侠五级) | 2013-07-28 14:05

@angelshelter: 我用svn,svn那是对单个文件的判断的,是文件的一个属性.

如果对象本身没有时间这个属性呢?对象如果是个数据的集合呢?从数据库取出来没有时间

支持(0) 反对(0) 越天 | 园豆:8 (初学一级) | 2013-07-28 19:48

@越天: 那你看提交的时候吧,我不知道协议里有没有时间记录,如果有,就以那个为记录吧。如果没有,就在struts2的拦截器中记录一个时间点,以那个时间点为标准。

支持(0) 反对(0) angelshelter | 园豆:9914 (大侠五级) | 2013-07-28 21:39
0

代码上可以加个读写锁.让a修改完,给b发个通知,提示内容有更新,让b刷新页面

jerry128 | 园豆:31 (初学一级) | 2013-07-27 15:18

网页怎么能不手动刷新的获取通知?

支持(0) 反对(0) 越天 | 园豆:8 (初学一级) | 2013-07-27 15:26

@越天: js+AJAX,你可以查查无刷新提交页面,基本实现是一样的

支持(0) 反对(0) jerry128 | 园豆:31 (初学一级) | 2013-07-29 18:31
0

路过学习

panjk | 园豆:712 (小虾三级) | 2013-07-27 15:22
0

加时间戳的办法很好,  还有一种方法就是 修改之前保存obj的原来所有字段的值,保存的时候同时提交原来的值和新的值, 数据库中判断, 如果原来值和数据库中的值有任何不同, 那么说明已经有其他人修改过了, 本次提交失败, 返回通知B, 询问是否取得最新值 还是用修改过的值直接覆盖。

收获园豆:2
gunsmoke | 园豆:3592 (老鸟四级) | 2013-07-29 11:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册