怎样监听到数据库的数据变化?该如何解决

怎样监听到数据库的数据变化?该如何解决

怎样监听到数据库的数据变化?
需要实现实时推送消息。前端使用websocket,后端php与node.js都行。
现在的问题是,前端监听服务器端某个数据表的数据变化。无论php socket还是nodejs socket.io都只监听socket端口的事件,但数据库的变化又怎样获得呢?这个数据表的更新可能自己socket端的用户,也可能不处在socket端,有时还可能是管理人员更改了数据。那么,作为服务端的socket怎样监听数据变化的事件,然后推送回前端?!
数据库可能是mysql,也可用mongo。
求解。
------解决思路----------------------
数据库用触发器呗.

或者你直接对数据进行一层封装,要改的数据通知一下.


------解决思路----------------------
在应用层面一般来说就是用拦截器之类的方式来实现变化监听,但是这种方式无法解决数据库端直接修改。

数据库层面一般三种方法:
1、类似Oracle等商用数据库,提供事件监听机制,可以主动通知连接方关于数据变更的通知;
2、采用触发器,需要监控的表设置触发器,然后调用Java函数等触发外部机制;
3、采用触发器,需要监控的表设置触发器,但只是写入日志表,外部仍需要轮询该日志表;
4、监控或扫描数据库日志,发现数据库每一笔变更动作。
------解决思路----------------------
1、Web应用也不能说用Oracle的不多,即便是淘宝,现在还没做到彻底去Oracle化,毕竟商用数据库的事务管理有优势。
2、并不是必须要使用中间件,直接JMS等消息机制其实是类似的,但缺点跟1类似,依赖数据库所提供能力;
3、这个是时效性问题而已了;
4、实时数据复制之类的需求一般会用这个手段;另外,某些ETL工具提供基于日志变化监控实现通知机制,不过ETL嘛,一般都要收费就是。


另外看了下你的需求,是实时推送消息,那恐怕要考虑用内存数据库会更合适些。
另一个需求命题是:要不要考虑运维人员对数据库端的直接修改,一般来说是不允许才更合适。