程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 剖析SQL Server 2005查詢通知之基礎篇

剖析SQL Server 2005查詢通知之基礎篇

編輯:關於SqlServer
摘要 在本系列文章中,我們將深入探討如何把.Net 2.0和SQL Server 2005的查詢通知特征聯合起來,以便通知應用程序何時關鍵數據發生變化進而達到消除反復查詢數據庫的目的。

  一. 引言

  數據庫應用程序的典型問題之一是更新陳舊的數據。

  設想有一個典型的顯示產品及其分類的電子商務網站。一個供應商的產品列表很可能並不經常發生變化,而其分類列表甚至更不會頻繁更改。然而,在用戶每次浏覽該網站時,必須從數據庫中反復查詢這些列表。這顯然是一種典型的低效資源利用,開發者和架構師都在絞盡腦汁想辦法以減少這種浪費。

  緩沖技術正是“最小化”對這種幾乎“停滯”的數據進行重復查詢的技術之一。這種數據可以被進行一次性查詢並存儲在一個緩沖區中,而且應用程序可以從緩存中重復地存取數據。偶爾情況下,才更新緩存以得到新數據。但是,圍繞更新緩存的時間調度方面出現了幾個問題。該多長時間操作一次呢?例如,你每隔多長時間希望你的產品分類改變一次?每隔幾個月一次?每隔兩個月刷新一次該緩沖區如何?你知道會發生什麼嗎?就在你刷新緩存之後,分類被更新,而且在下一次刷新前在兩個月的時間裡它將保持陳舊。

  查詢通知,是微軟的ADO.Net和SQL Server小組協作開發的新成果。簡言之,查詢通知允許你緩沖數據並且僅在SQL Server中的數據發生變化時才發出通知。一旦接到通知,你就可以刷新你的緩沖區或者采取你需要的任何措施。

  在SQL Server 2005中引入的一種新特征“Service Broker”使得查詢通知成為可能。Service Broker把隊列機制引入到數據庫管理中,它使用一組隊列與服務進行通訊,而服務反過來也知道如何往回通訊以調用相應的實體。其實,這些隊列和服務都是一些與表、視圖和存儲過程一樣的類對象。盡管完全可以在SQL Server內使用Service Broker,但是ADO.Net知道如何與Service Broker進行通訊以觸發這種機制並且從Service Broker中檢索回通知。

  注意 當SQL Server中的數據發生改變時,查詢通知允許你緩沖數據並且通知你。

  在.NET一端,存在很多種“鉤入”這種功能的方式。ADO.NET 2.0提供了System.Data.SqlClIEnt.SqlDependency和System.Data.Sql.SqlNotificationRequest類。SqlDependency是SqlNotificationRequest的一種高級實現,並且是當使用ADO.NET 2.0時你最有可能使用的類。ASP.NET 2.0也通過System.Web.Caching.SqlCache-Dependency類(它提供了一個針對SqlDependency的包裝器)與Service Broker進行通訊,而且這是直接通過在一個ASP.NET頁面中使用<%OutputCache>指令以聲明方式提供的功能實現的。這允許ASP.Net開發者容易地實現使依賴於SQL Server中的數據中的緩存無效。

  二. .Net與Service Broker的通訊

  上面這些技術是如何聯合到一起來解決“緩沖之謎”的呢?盡管你可以采取很多的措施以允許SQL Server把服務提供給.Net;但是,關鍵還在於,發送到SQL Server的查詢具有一個依附到它們的標志以便告訴SQL Server,除了返回結果集外,SQL Server還應該把該查詢(及其請求者)注冊到Service Broker。為此,你要創建一個感知該查詢的隊列和一個依附到該隊列的服務,並且知道如何返回到客戶端。如果該結果集中的任何一行在數據庫中得到更新,那麼在相關隊列中的項將觸發,並且反過來,把一條消息發送到它的服務,然後把一個通知發送回初始化該請求的應用程序。

  圖1是SQL Server Management Studio的一個快照,它顯示了在數據庫的Service Broker部分中的隊列(Queues)和服務(Services)。

剖析SQL Server 2005查詢通知之基礎篇
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved