编程对数据库中数据更新的即时反应的最佳方法是什么?
我能想到的最简单的方法是一个线程,它检查数据库是否对某些数据进行了特定的更改,并且不断等待在一段预定义的时间内再次检查它.这个解决方案对我来说似乎是浪费和不理想的,所以我想知道是否有更好的方法.
我认为必须有某种方式,毕竟像gmail这样的网络应用程序似乎能够在向我发送新电子邮件后立即更新我的收件箱.当然,我的客户不是一直在不断检查更新.我认为他们这样做的方式是使用AJAX,但AJAX的行为方式就像我不知道的远程函数调用.我很想知道gmail是如何做到这一点的,但我最想知道的是如何在数据库的一般情况下这样做.
编辑:请注意我想立即对客户端代码中的更新做出反应,而不是在数据库本身,所以据我所知触发器无法做到这一点.基本上我希望USER在获得数据库更改后获得通知或更新其屏幕.
你基本上有两个问题:
您希望浏览器能够从Web应用程序服务器接收异步事件,而无需在紧密循环中进行轮询.
您希望Web应用程序能够从数据库接收异步事件,而无需在紧密循环中进行轮询.
对于问题#1
请参阅这些维基百科链接,了解我认为您正在寻找的技术类型:
彗星
反向AJAX
HTTP服务器推送
编辑:2009年3月19日 - 刚刚遇到了可能对问题#1感兴趣的ReverseHTTP.
对于问题#2
解决方案将特定于您正在使用的数据库以及服务器使用的数据库驱动程序.例如,使用PostgreSQL,您将使用LISTEN和NOTIFY.(并且冒着被投票的风险,你可能会使用数据库触发器在更改表数据时调用NOTIFY命令.)
另一种可能的方法是,如果数据库有一个接口来创建链接到动态库(即DLL或.so文件)的存储过程或触发器.然后你可以用C或其他什么来编写服务器信令代码.
同一主题,某些数据库允许你写的语言,如存储过程的Java和Ruby,Python的和其他人.您可能能够使用其中一个(而不是像C那样编译机器代码DLL的东西)用于信令机制.
希望能给你足够的想法开始.
我认为必须有某种方式,毕竟像gmail这样的网络应用程序似乎在向我发送新电子邮件后几乎立即更新我的收件箱.当然,我的客户不是一直在不断检查更新.我认为他们这样做的方式是使用AJAX,但AJAX的行为方式就像我不知道的远程函数调用.我很想知道gmail是如何做到这一点的,但我最想知道的是如何在数据库的一般情况下这样做.
有时候看看有线电视......有一些谷歌的流量经常发生在那里,它出现了.
根据您的数据库,触发器可能有所帮助.我编写的应用程序依赖于触发器,但我使用轮询机制来实际"知道"某些内容已发生变化.除非你可以将更改传达出数据库,否则我需要一些轮询机制.
只是我的两分钱.