是否有可能聽關係數據庫更新?例如,我的Web應用程序想通過Comet技術向客戶端發送數據更新。我可以讓程序定期輪詢數據庫,但這不是高性能和可擴展的。是否有可能聽關係數據庫更新?
如果應用程序可以引用數據庫的「事件處理程序」,則應用程序可以在每次更新給定的數據庫表數據時獲取通知。這聽起來更有希望,但我沒有找到任何具體的例子。這是聽者模式。
常見的關係型數據庫是否支持這種功能?
是否有可能聽關係數據庫更新?例如,我的Web應用程序想通過Comet技術向客戶端發送數據更新。我可以讓程序定期輪詢數據庫,但這不是高性能和可擴展的。是否有可能聽關係數據庫更新?
如果應用程序可以引用數據庫的「事件處理程序」,則應用程序可以在每次更新給定的數據庫表數據時獲取通知。這聽起來更有希望,但我沒有找到任何具體的例子。這是聽者模式。
常見的關係型數據庫是否支持這種功能?
MS SQL Server已查詢過更改通知,自2005年以來這裏有一個關於如何使用該功能的詳細信息:http://msdn.microsoft.com/en-us/library/ms175110.aspx
自10g版本的Oracle已經有了這一點,我想。這裏有更多的信息:http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_dcn.htm
我不知道任何其他常見的RDBMS支持這一點。
這絕對是非標準的,所以一般來說答案是否定的。一些數據庫(Oracle,SQL Server)提出了專有解決方案(就像其他很多情況一樣 - 在某些情況下,SQL標準嚴重受限)。
儘管如此,它仍然是輪詢。抱歉。數據庫無法將事件轉發給應用程序。
在SQL Server的情況下,更改通知將成爲SQL SERVER上消息隊列中的條目(使用SQL Server消息代理),並且仍然必須輪詢隊列。
也就是說,可以使用「長輪詢」 - 您啓動一個分離線程,請求數據庫進行下一個更改....阻塞(等待)直到它發生。
使用語法的
WAITFOR (RECEIVE * FROM MyQueue);
風格。該請求將阻塞,直到基本上收到某些東西。
現在,如果你使用像MySQL這樣的「通用」數據庫 - 我認爲你已經完成了。如:不支持。這絕對是一個更高端的企業形象。
你可以看看Firebird event