MySQL有没有一种机制,当某些数据更新时,通知连接到MySQL的应用程序,而不需要应用程序循环查询这些数据的情况?

解决方案 »

  1.   

    mysql不会实现这种机制的,应用始终是数据的读写方,消息驱动只能由应用发起。
      

  2.   

    SQLServer 可以用 SqlDependency  。
    MySQL 只能自己加触发器, 将相关信息放到自己定义的日志表里面, 轮询日志表来实现了。
      

  3.   

    sql server 的 SqlDependency  实现也最终是用的轮询
      

  4.   

    SqlDependency  是事件通知吧, 至少用起来没看到有轮询。具体的内部实现就不知道了。
      

  5.   

    SqlDependency  是事件通知吧, 至少用起来没看到有轮询。具体的内部实现就不知道了。
    轮询的,它是通过 Service Broker 做的,轮询的是 Queue, 可以通过 PROFILER 看到轮询的请求,事务通知是从组件中发出,不是从数据库服务器触发
      

  6.   

    SqlDependency  是事件通知吧, 至少用起来没看到有轮询。具体的内部实现就不知道了。
    轮询的,它是通过 Service Broker 做的,轮询的是 Queue, 可以通过 PROFILER 看到轮询的请求,事务通知是从组件中发出,不是从数据库服务器触发

    佩服, 研究得好深入
      

  7.   

    数据库肯定没有,你要自己实现,大项目不会做立即持久化而是把操作都在缓存中进行然后批量提交操作到一个事物,这属于直接在程序中做事物控制,这时候你就可以在事物中增加事件的机制,比如.net中有dataset这个类型可以缓存数据库数据和各种数据库操作,而且这个类型还有很多事件,什么行改变事件啦行删除事件啦等等,但凡这种通知的操作必定都是在程序中作最好,就算是触发器都不推荐用,因为触发器可能会引起一些级联的反应,而且触发器的通知只限于数据库内而不会通知应用程序
      

  8.   

    SqlDependency   在 SQL Server 2005 之前版本的实现,是用触发器+轮询实现,你也可以考虑一下这种方法:
    1. 所有要数据通知的表上建立触发器,在数据变化时,将数据变化的主键写和表名写入一个记录表
    2. 程序轮询这个记录表,如果有检查到数据变化,则触发事务通知变化的记录表名和id
    这样触发器简单,开销小,轮询不在业务表上进行,也避免了一些不必要的影响
      

  9.   

    另外一种可选的办法是研究 MySQL 的 binlog,自己写程序把自己伪装成 slave , 从数据库拉 binlog 获取数据变化
    阿里有一个类似的东东,如果你的开发功底深厚,可以借鉴
    http://agapple.iteye.com/blog/1796633
      

  10.   

    MySQL 里没有
    PostgreSQL有此功能, 在服务器层有 LISTEN / NOTIFY 语句 , 同时我改写了PSQLODBC,  在ODBC中封装NOTIFY/LISTEN  , 在C/S结构中完美支持此功能
    可参考 我的blog
    http://blog.csdn.net/trainee/article/details/1567565