首页 新闻 会员 周边 捐助

检测sql数据库数据发生变化

0
悬赏园豆:10 [已解决问题] 解决于 2017-01-19 16:34

最近有做一个项目,需要在前台每三秒检查一次数据库里面,固定的那张表某个列发生变化的时候检测得到并返回一个结果。

例如:数据库Test 中,有张表Test1 。

  表里面有

         名称 年龄  性别        三列数据

     张三  10   男

     李四  12   男

     王五  13   女

我这边客户端显示这个表的数据,当别人在其他界面更改这个表里面的值的时候(例如:把张三的年龄改为了11岁)。我能在我这边能够获取到数据库的数值发生了变化,并返回一个值回来,然后我刷新我的界面获取到最新的值,实现实时刷新的功能。请问有什么办法能够检测到数据库的值发生变化,并给前台返回一个值的呢?

夜里挑键戳灯的主页 夜里挑键戳灯 | 菜鸟二级 | 园豆:299
提问于:2017-01-17 14:21
< >
分享
最佳答案
0

a client:

ajax({张三,10岁})

a server:

get db. if(11岁==10岁)

return 更改后的数据

 

这个最简单。

高大上的那些玩意看情况用,比较websocket,eventbus

收获园豆:8
czd890 | 专家六级 |园豆:14486 | 2017-01-17 14:25

这种对比的方法我有想过,但是我还是想考虑下更好的方法,您说的websocket,eventbus我现在在了解,谢谢啦

夜里挑键戳灯 | 园豆:299 (菜鸟二级) | 2017-01-17 14:32

@打了个字: 不要过渡考虑就好。

无非就是前端页面订阅当前页面上数据的id。

修改端,修改之后发送一个消息或者触发一下订阅。

订阅判断数据是否更改用websocket通知到前端页面

czd890 | 园豆:14486 (专家六级) | 2017-01-17 14:41

@calvinK:  我有做类似于这订阅的功能,另外加了一列,例如 0,1 有数值发生变化的时候,数值发生变化的时候 0变成1 ,在获取到前端检测这个0,1 当 0变成1 的时候,重新获取数据库的值,并将1改为0。但是我担心会触发一个问题,当几个这个界面时间发生1-2秒的交错的时候,快的界面获取到了这个变化,并将数值变为了0  ,但是慢的一方没有获取到值的变化,没有及时检测到数据发生了变化的问题,虽然这不是个大问题。但是还是想请问下有没有更好点的办法。

夜里挑键戳灯 | 园豆:299 (菜鸟二级) | 2017-01-17 14:55

@打了个字: 

当几个这个界面还带编辑功能么,还是什么意思。

单纯展示最终都会显示当前值呀

czd890 | 园豆:14486 (专家六级) | 2017-01-17 18:22

@calvinK: 有展示,并且可以在这个界面修改这个值,修改的时候会触发一次重新获取的Ajax 

夜里挑键戳灯 | 园豆:299 (菜鸟二级) | 2017-01-18 09:51

@打了个字: 

修改前,可以主动ajax获取一下当前数据

修改中,数据被改变。这属于并发,修改的时候可以带上版本号。

czd890 | 园豆:14486 (专家六级) | 2017-01-19 16:05

@calvinK: 我用刷新办法做了个刷新按钮,目前只能这么解决了。这个不能搞得太复杂了,感谢您的解答,谢谢!

夜里挑键戳灯 | 园豆:299 (菜鸟二级) | 2017-01-19 16:34
其他回答(3)
0

前台用setinterval每隔3秒调用ajax请求数据

收获园豆:1
忧虑的心 | 园豆:73 (初学一级) | 2017-01-17 14:30

我的想法是每十秒固定调用一次,另外的时间只是检查数据发生变化没,减轻负担

支持(0) 反对(0) 夜里挑键戳灯 | 园豆:299 (菜鸟二级) | 2017-01-17 14:31
0

其实就是固定频次,发送请求,带上页面的值a,与数据库的值b比较,返回比较结果

收获园豆:1
Albertyang | 园豆:228 (菜鸟二级) | 2017-01-18 09:33

 这种方法我有考虑到,但是我想找到一个更好的办法

支持(0) 反对(0) 夜里挑键戳灯 | 园豆:299 (菜鸟二级) | 2017-01-18 09:57
0

数据库加一个rowversion时间戳, 固定时间去比较时间戳就可以了 不一致 返回新数据更新页面就可以了

 

 

NET高级QQ群:479601208 --欢迎大家加入讨论技术

EasyCms- | 园豆:120 (初学一级) | 2017-02-09 13:26

这个 rowversion是怎么用的?

支持(0) 反对(0) 夜里挑键戳灯 | 园豆:299 (菜鸟二级) | 2017-02-09 14:54

@打了个字: 其实就是一个unix时间戳 新建一个字段RowVersion   字段类型为timespan   z这个字段数据库会自己维护,不管插入还是更新 数据都会更新这个时间戳,  所以 你比较的时候就用当前数据的RowVersion 和数据库这条数据的RowVersion来比较 如果不一致 就说明数据这条数据已经发生了变化

支持(0) 反对(0) EasyCms- | 园豆:120 (初学一级) | 2017-02-09 15:00

@123!: 恩 好的我大概知道是什么意思,这个方法很不错。 感谢您的解答!

支持(0) 反对(0) 夜里挑键戳灯 | 园豆:299 (菜鸟二级) | 2017-02-10 08:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册