在本系列文章中,我們將深入探討如何將 .NET 2.0 與 SQL Server 2005 的查詢通知功能結合,讓應用程式在關鍵資料異動時即時收到通知,從而消除重複輪詢資料庫的需求,提升系統效能。
資料庫應用程式常面臨的一大難題是「陳舊資料」的更新。以典型的電子商務網站為例,產品分類與列表極少變動,但每次使用者瀏覽都必須重複查詢資料庫,造成資源浪費。快取技術雖能緩解此問題,但快取失效的時機極難把握:若設定固定間隔刷新,資料在刷新後若立即異動,便會在下一次刷新前長期處於過時狀態。
SQL Server 2005 引入的 Service Broker 使查詢通知成為可能。Service Broker 將佇列機制導入資料庫,透過佇列與服務通訊,當資料異動時,觸發佇列項目,經由服務將通知送回發起請求的應用程式。應用程式收到通知後,即可更新快取或採取後續動作。

當查詢附加特定旗標送往 SQL Server 時,伺服器除回傳結果集外,還會將查詢及請求者註冊至 Service Broker。一旦結果集中任一資料列異動,相關佇列即被觸發,透過服務將通知推送回客戶端。在 .NET 端,System.Data.SqlClient.SqlDependency 是最常用的高階實作;ASP.NET 2.0 則透過 SqlCacheDependency 與 <%@ OutputCache %> 指令,讓網頁快取能依賴資料庫資料自動失效,極大簡化開發工作。
注意: 查詢通知允許你快取資料,並在 SQL Server 資料異動時主動通知你。