怎样监听到数据库的数据变化?

jianwu5 2015-03-13 02:21:15
需要实现实时推送消息。前端使用websocket,后端php与node.js都行。
现在的问题是,前端监听服务器端某个数据表的数据变化。无论php socket还是nodejs socket.io都只监听socket端口的事件,但数据库的变化又怎样获得呢?这个数据表的更新可能自己socket端的用户,也可能不处在socket端,有时还可能是管理人员更改了数据。那么,作为服务端的socket怎样监听数据变化的事件,然后推送回前端?!
数据库可能是mysql,也可用mongo。
求解。
...全文
2071 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianwu5 2015-03-21
  • 打赏
  • 举报
回复
引用 6 楼 ldh911 的回复:
1、Web应用也不能说用Oracle的不多,即便是淘宝,现在还没做到彻底去Oracle化,毕竟商用数据库的事务管理有优势。 2、并不是必须要使用中间件,直接JMS等消息机制其实是类似的,但缺点跟1类似,依赖数据库所提供能力; 3、这个是时效性问题而已了; 4、实时数据复制之类的需求一般会用这个手段;另外,某些ETL工具提供基于日志变化监控实现通知机制,不过ETL嘛,一般都要收费就是。 另外看了下你的需求,是实时推送消息,那恐怕要考虑用内存数据库会更合适些。 另一个需求命题是:要不要考虑运维人员对数据库端的直接修改,一般来说是不允许才更合适。
ETL这个工具还真没接触过,可能我做的还是较低端的程序。 最后一条建议是好的。多谢。
jianwu5 2015-03-14
  • 打赏
  • 举报
回复
引用 4 楼 ldh911 的回复:
在应用层面一般来说就是用拦截器之类的方式来实现变化监听,但是这种方式无法解决数据库端直接修改。 数据库层面一般三种方法: 1、类似Oracle等商用数据库,提供事件监听机制,可以主动通知连接方关于数据变更的通知; 2、采用触发器,需要监控的表设置触发器,然后调用Java函数等触发外部机制; 3、采用触发器,需要监控的表设置触发器,但只是写入日志表,外部仍需要轮询该日志表; 4、监控或扫描数据库日志,发现数据库每一笔变更动作。
从上面几条方法来看都不太现实。 1、web应用使用Oracle的不多; 2、使用了中间件java,使用事情变得复杂,还不如直接使用消息队列通过udf扩展传递消息; 3、轮询的还是算了吧,可能也只比ajax长轮询的做法好那么一点。
MiceRice 2015-03-14
  • 打赏
  • 举报
回复
在应用层面一般来说就是用拦截器之类的方式来实现变化监听,但是这种方式无法解决数据库端直接修改。 数据库层面一般三种方法: 1、类似Oracle等商用数据库,提供事件监听机制,可以主动通知连接方关于数据变更的通知; 2、采用触发器,需要监控的表设置触发器,然后调用Java函数等触发外部机制; 3、采用触发器,需要监控的表设置触发器,但只是写入日志表,外部仍需要轮询该日志表; 4、监控或扫描数据库日志,发现数据库每一笔变更动作。
MiceRice 2015-03-14
  • 打赏
  • 举报
回复
1、Web应用也不能说用Oracle的不多,即便是淘宝,现在还没做到彻底去Oracle化,毕竟商用数据库的事务管理有优势。 2、并不是必须要使用中间件,直接JMS等消息机制其实是类似的,但缺点跟1类似,依赖数据库所提供能力; 3、这个是时效性问题而已了; 4、实时数据复制之类的需求一般会用这个手段;另外,某些ETL工具提供基于日志变化监控实现通知机制,不过ETL嘛,一般都要收费就是。 另外看了下你的需求,是实时推送消息,那恐怕要考虑用内存数据库会更合适些。 另一个需求命题是:要不要考虑运维人员对数据库端的直接修改,一般来说是不允许才更合适。
jianwu5 2015-03-13
  • 打赏
  • 举报
回复
php socket客户端/node.js客户端获取数据更改行为--->通知php/nodejs服务端--->通知html客户端。
jianwu5 2015-03-13
  • 打赏
  • 举报
回复
引用 1 楼 skgary 的回复:
数据库用触发器呗. 或者你直接对数据进行一层封装,要改的数据通知一下.
哎,我真笨。 在php socket或node.js中再包装一层作为客户端的socket不就可以了吗?!
skgary 2015-03-13
  • 打赏
  • 举报
回复
数据库用触发器呗. 或者你直接对数据进行一层封装,要改的数据通知一下.

25,980

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧