SQL Server XML 和 Web 應用體系結構
John A. Bocharov
Microsoft Developer Network
摘要: 本文概要介紹在一組基于 SQL Server XML 的解決方案中使用 Duwamish Books, Phase 4 應用和更可靠的 Duwamish Online 應用后所得到的體系結構。
有關 Microsoft® SQL Server™ 2000 中介紹的 SQL Server XML 技術套件的詳細信息,請參閱相關文檔 Duwamish Online SQL Server XML 分類瀏覽 (英文)。
您可以在 MSDN Online 代碼中心 (英文)查看 d5sqlxml.exe 示例代碼。
目錄
簡介
邏輯體系結構
物理體系結構
集成
影響
使用建議
總結
簡介
Microsoft SQL Server 2000 以其眾多的新功能閃亮登場,其中包括我們稱之為 SQL Server XML 的系列 XML 新技術。此技術套件包含諸多改進、增強和特性,使 SQL Server 成為更具 Web 特點的應用程序,向 Microsoft .NET 版本邁進了一步。
SQL Server XML 可用于擴展、增強或替換 Web 應用的體系結構。新特性可分為兩個主要組件:
-
數據庫組件,允許數據庫對 XML 進行讀、處理和寫操作
- SQL Server XML Internet Server API (ISAPI) 應用,允許通過 HTTP 訪問數據庫
無論是使用這兩個組件還是使用其中的一個,都可以獲得多個理想的體系結構。為了測試新工具的功能和靈活性,我們檢驗了 Duwamish Online 的邏輯體系結構,并將其應用到一組基于 SQL Server XML 的解決方案中。為了使研究更全面,我們在測試中同時使用了比較簡單的 Duwamish Books, Phase 4 應用和更可靠的 Duwamish Online 應用。下面是所得出的體系結構的概述。
邏輯體系結構
我們必須認識到不管應用是什么形式,下面兩種體系結構始終存在: 邏輯體系結構 ,是用于分析應用的組織概念,而 物理體系結構 則表示實施應用的途徑。區分這兩個概念是非常必要的,因為這兩個體系結構很少完全對應(即使有過這種情況)。下面您將看到,與給定的邏輯設計相對應的物理體系結構會根據不同的情況而改變。
創建 Duwamish Online 及其以前版本時,我們根據 Microsoft n -層準則確定邏輯體系結構。該體系結構包括由 Web 應用執行的公共操作,并不是專門針對 Duwamish Online 的。
圖 1:邏輯體系結構
應用分為五個邏輯層。距離客戶端最遠的是數據層,其中存儲了應用所需的信息。它的上一層為數據訪問層,它從數據庫中數據的表示形式中提取數據,并且包含所有數據庫操作公用的例程。數據訪問層直接由業務邏輯層使用。業務邏輯層通過隱藏來自更高層的事務邏輯和實施細節來提取業務事務。體系結構的下一個邏輯層是工作流層,也稱為業務接口,它提供了一個到表示層的簡單界面(也稱為接口)。工作流層管理內部狀態,并使用業務邏輯層提供的自動操作來完成復雜的工作流。最后是表示層,它為用戶轉換工作流層返回的結果。有一些轉換比較簡單,例如通過 XSL 樣式表將結果轉換為 HTML;有些則比較復雜,例如通過電話線閱讀結果的語音算法。
下面是從這個邏輯體系結構得出的幾個物理體系結構。
物理體系結構
分發負載
SQL Server XML 使數據庫具備除讀寫數據之外的很多其他功能。XML 功能允許存儲過程處理大量高度結構化的數據。相關信息可以作為 XML 傳遞到存儲過程,從而允許業務邏輯或工作流以存儲過程(而不是 COM+ 或腳本)的形式實施。這意味著,現在您可以將更多應用處理移到數據庫一級。如果決定采用這種方式,請切記數據庫是應用中可伸縮性最小的部分。
決定應用在數據庫和 Web 服務器之間分發處理的方式是非常關鍵的。這將影響應用所需的軟件和硬件,開發應用所需的專業技能,以及部署、更新和維護的過程。為遵循簡單性原則,我們將參考一個服務器配置,其中 Web 服務器執行大部分工作,屬于“頭重”類型。而那種由數據庫服務器執行大部分工作的配置則屬于“腳重”類型。
對于大多數應用,有兩方面的因素決定其選擇“頭重”服務器:
-
成本
:數據庫服務器所用的軟件和硬件比 Web 服務器所用的軟件和硬件成本高。
- 可伸縮性 :在 SQL Server 2000 中,數據庫的可伸縮性在 SQL Server 7.0 的基礎上得到改善,但是為了充分發揮新硬件的功能,還需要仔細規劃和有效維護。
基于以上原因,基于“腳重”類型的服務器配置體系結構留待以后討論。
Microsoft n -層物理體系結構
作為比較,我們先看一個沒有使用 SQL Server XML 的 Duwamish Online ( http://www.duwamishonline.com/ ) 的物理體系結構。它的設計目的是盡可能實現上面介紹的邏輯體系結構。盡管每一層都設計為執行一類邏輯操作,但是,仍然出現功能分布超出范圍的情況。例如,某些業務邏輯由數據庫中的存儲過程執行以提高性能。那些熟悉 Duwamish Books, Phase 4 的用戶很快就會發現結構的改變很小。
圖 2:Microsoft n -層體系結構
此體系結構允許每個組件專用于一個特定任務,并使用最適合該任務的技術。緩存用 C++ 編寫以最大程度提高性能;使用 Active Server Pages (ASP) 和 XSL 來控制表示邏輯;由 Microsoft Visual Basic® 執行工作流、業務邏輯和數據訪問;用 Transact SQL (T-SQL) 控制組件和數據庫操作。未劃定技術界限的各層將按照將其作為單獨的 COM+ 組件實施來劃分。所有這些靈活性的代價是各層必須協同工作。跨環境調試是一項艱難的工作,必須非常細心,以確保適合一種環境的數據必須重新設置格式以適合其目標環境。(例如,字符串“a < b”存儲在數據庫中不會出現問題,但是如果沒有經過轉義就放入 XML 文件中,將導致括號不匹配,從而損壞分析程序。)
讀取方物理體系結構
Duwamish Online 在整個應用中使用單一的物理結構。與此相反,基于 SQL Server XML 的版本使用兩個互補的物理體系結構:一個用于讀取,另一個用于寫入。在我們的例子中,第二種比較合適,因為兩種使用情況需要不同類型的處理。
注意:??? 請參閱 http://msdn.microsoft.com/voices/news/sqlxml.asp (英文)中的完整體系結構圖。
圖 3:讀取方體系結構
SQL Server XML 技術用于所有層(從數據庫到表示)以最大限度地提高性能。SQL Server XML ISAPI 應用代替 Web 層上的 ASP。ISAPI 應用和 SQLOLEDB 提供程序自動執行數據訪問,從而減小代碼量,縮短開發時間。獲得此性能的代價是失去了可靠的 ASP 對象模型和靈活性。下面一節 寫入方物理體系結構 中將說明失去的功能,以及如何在必要時將應用代碼集成到體系結構中,從而重新獲得這種靈活性。
現在,讓我們看一些更細致的體系結構特性。表示方法由 XSL 樣式表單獨控制。因為數據庫返回的數據為 XML,所以這一特性很有用。但是,使用 XSL 的好處是不依賴于技術。換句話說,模板、ASP 頁和 COM+ 組件可以使用同一個樣式表。模板包含工作流層。(模板是 XML 說明文件,它生成數據驅動的動態 Web 頁,允許通過 HTTP 快速訪問數據庫,同時提供一定級別的數據提取和數據安全性。)模板通常使用存儲過程進行數據訪問,盡管它們也可以使用 XML Data Reduced (XDR) 架構,這種架構提供了一種直觀的語法將數據庫對象映射到 XML 元素,還提供了使用 XPath(XML 路徑語言)進行數據庫查詢的能力。有關模板、XDR 架構和實施細節的詳細說明,請參閱我以前的文章 Duwamish Online SQL Server XML 分類瀏覽 。
這種體系結構沒有單獨的業務邏輯層。這是因為我們的應用中的只讀操作只有很少的業務邏輯量,可以輕松地集成到數據訪問例程中。在其他情況下,業務邏輯層可作為數據庫中的一組存儲過程高效實施。有關這方面的設想和方法,請參閱本文后面的 以數據庫為中心的體系結構 一節。
經過驗證,最大的變化發生在數據庫層。新增的一組功能允許存儲過程直接讀寫 XML。事實上,所有數據檢索都通過 XML 來完成。
寫入方物理體系結構
SQL Server XML 模板經過高度流程化,能盡可能高效地通過 HTTP 訪問數據庫。為此付出的代價是功能集受到限制。在模板中找不到所需功能的情況下,SQL Server 的專用 ISAPI 應用被替換為 ASP、ASP 和 COM+ 的組合或自定義的 ISAPI 應用。
本節中說明的體系結構適用于您的頁面要執行下列操作的情況:
-
訪問多個服務器上的數據庫
-
處理在設計時未知其格式的 HTTP 請求
-
調用 COM/COM+ 對象
-
使用 COM+ 事務
- 連接至 Internet 上的任何應用或 Web 服務,例如付款提供程序
圖 4:寫入方體系結構
Web 層上的代碼表示應用功能的四個層——數據訪問、業務邏輯、工作流和表示。在開發應用時,請確保此代碼與體系結構保持一致。這可使代碼的可讀性更高,也更易于維護。如果決定單獨使用 ASP,腳本類的效率會更高。如果在業務邏輯層或工作流層有大量復雜的處理,對這些層使用 COM+ 組件可能速度更快。相反,對于處理量相對較小的情況,使用腳本可能速度更快。
這種新體系結構更出色的原因是,所有層(從數據到表示)都使用 XML 來傳輸和存儲信息。數據庫中的存儲過程使用這些新功能來讀寫 XML。數據訪問層利用 ADO 2.6 流與數據庫進行高效、基于 XML 的通訊。
更新穎的方法是將某些中間層下移到數據庫中。
以數據庫為中心的體系結構
Duwamish Online 體系結構基于這樣一種設想:因為數據庫的可伸縮性最低,它應該設計成執行盡可能少的任務。分布式分區視圖等新功能允許在多個服務器之間分擔工作量,從而提高了數據庫的可伸縮性,使開發人員可以選擇將大部分工作放在何處。
如果選擇將“腳重”服務器群集(數據庫方面功能更強)與 SQL Server XML 體系結構一起使用,則另一種方法是使用與 n -層組件的分層方式相似的方式來對數據庫中的存儲過程進行分層。要實現這一點,必須有好的編程方法,例如選擇適當的數據結構和盡可能避免重復代碼。
圖 5:以數據庫為中心的體系結構
這種體系結構中的表示層還包含用于訪問數據庫中的存儲過程的代碼。此代碼可能與傳統數據訪問層中的代碼相同。但是,調用此代碼時數據訪問層可能會出錯,因為這些例程調用工作流層提供的接口。
在使用存儲過程進行開發工作時應該小心避免出現缺陷。讓我們先來看一個設計,這個設計使用了幾個智能存儲過程,它們先執行該層的公共任務,然后再執行在下一個層上繼續執行其代碼路徑的邏輯切換。在工作流層中調用“智能過程”將對應于若干個不同的操作之一。此過程如下所示:
CREATE PROCEDURE /* 這是一個智能過程,執行工作流操作 */DoWorkflow???/* Action 用于選擇該調用的多個操作之一 */???@Action nvarchar(255),/* SomeOtherParameters 是一個占位符,用于工作流所需的其他輸入 */???@SomeOtherParameters ntextAS/* 執行工作流的公共操作 */Execute SomeCommonWorkflowOperationsIf @Action = N'Action1'BEGIN??????/* 執行 Action 1 */???Execute BusinessLogicAction1ENDElse If @Action = N'Action2'BEGIN??????/* 執行 Action 2 */???Execute BusinessLogicAction2ENDGO
第一次調用此過程時,SQL Server 優化執行恰好第一次運行的任何代碼路徑。這使其余代碼路徑的運行效率降低,盡管它們的成本可能更高或者使用的頻率更高。
為確保優化執行所有代碼路徑,可為每個操作創建一個單獨的過程,盡可能避免切換邏輯。為防止代碼重復,所有層中多個操作共享的函數應該放在單獨的過程中。當該設計產生大量過程時,優化可以大大提高應用的效率。
集成
Web 開發中最值得稱道的一點是用戶看不到實施過程。因此,本文中介紹的體系結構可以輕松地合并到單個應用中,而無需用戶參與。下面是一些準則,可以幫助您更輕松地集成應用的不同部分:
-
在整個應用中使用 XML
。XML 可以用于任何技術中,可以使用 XSL 樣式表輕松地進行轉換,還可以毫無困難地存儲在任何地方。SQL Server XML 使得在您的應用中使用 XML 比以前更容易。
-
盡可能分解代碼
。
-
使用 XSL 樣式表來轉換 XML。可以在模板、COM+ 組件和一段腳本之間方便地共享同一個 XSL 樣式表。
-
當腳本執行多個函數時,使用腳本類分解代碼。
- 在數據庫方面,始終使用存儲過程進行數據訪問。它們不僅易于維護,而且比未編譯的 SQL 查詢執行速度快得多。
-
使用 XSL 樣式表來轉換 XML。可以在模板、COM+ 組件和一段腳本之間方便地共享同一個 XSL 樣式表。
影響
本節說明使用新的體系結構對于您的應用在“功能”和性能方面有何影響。
可編程性
可編程性是指容易編寫應用代碼。通常反映在開發應用的時間而不是功能方面。以 Duwamish Online 應用為例。該應用的五個層是通過一組完全不同的技術來實現的。表示層使用了 C++(用于緩存組件)和 Web 技術(例如 XML、XSL 和 ASP)。工作流層、業務邏輯層和數據訪問層是 Visual Basic COM+ 組件,而數據庫中的存儲過程是用 T-SQL 編寫的。使用這么多技術的優點是,開發人員可以針對每種類型的操作選擇最佳技術。但是,要使所有組件高效地緊密協作無疑是一個難點。當使用多種不同的工具和不同的編程語言開發組件時,跨組件跟蹤和調試始終非常困難。
在整個應用中使用 SQL Server XML 將有助于最大程度地降低不同技術的工作量。(XSL 是一個例外:它不屬于 SQL Server XML,但卻緊密集成在 SQL Server XML 模板中)。各層之間一起工作,但產生的沖突最少。在各層之間進行調試非常簡便,因為所有的中間數據都是 XML,無需任何額外操作。但是,可編程性的最大優點可能是大大減少了代碼量:基于 SQL Server XML 版本的 Duwamish Books, Phase 4 可完成基于 COM+ 的同類產品相同的工作,但前者的代碼量只有后者的十分之一。通過 SQL Server XML 的內置功能使數據訪問、XML 轉換、XSL 轉換和數據緩存變得更加簡便。
遺憾的是,不能再使用 XSL 的高效調試工具,而用于其他新技術的調試工具相對來講還不成熟(尤其是與 Microsoft Visual Studio® 提供的跨語言調試能力相比)。
可管理性
SQL Server XML 應用易于部署。對于運行在 Web 層的代碼,只需簡單地將文件復制到它們的目標目錄,然后運行一次配置工具以建立相應的虛擬目錄。更新過程只是簡單地替換過期的文件。可以使用 SQL Server Enterprise Manager 輕松地管理數據庫對象。
性能
有關詳細信息,請參閱 Duwamish Online SQL Server XML 分類瀏覽 文章中有關性能的一節。
使用建議
有關新技術最重要的問題可能是使用的時機。盡管 SQL Server XML 不是所有 Internet 問題的最終解決方案,但是在某些情況下,其優勢是顯而易見的,這包括代碼量大大減少、開發周期明顯縮短、性能更高和維護更方便。新技術的兩個主要組件(數據庫和 ISAPI 應用)的使用情況不同,如下所述。
SQL Server XML 的數據庫服務器組件幾乎用于所有應用。即使要將現有的應用從使用數據庫轉換為使用 XML 也是值得的。一些顯著的優點如下:
-
易于本地化(使用 XSL)
-
不依賴于平臺和技術
-
易于緩存 XML 數據
-
能夠使用脫機/斷開連接的應用
-
易于合并或創建 Web 服務
- 能夠與其他應用協同工作
新技術的 Web 界面組件是專用的。它們可提供對數據庫的快速、高效訪問,并提供使用 XSL 樣式表輕松創建數據驅動頁的能力。這些優點非常有用。在我們的測試中,Duwamish Online SQL Server XML 分類瀏覽(無緩存)比 Duwamish Online(有緩存)的性能高 15%。使用 SQL Server 2000 技術預覽版進行的早期測試顯示 SQL Server XML ISAPI 緩存可使性能有數量級的提高。但是,如果應用包含下列任何一種情況,則可以考慮使用基于 ASP 的中間層:
-
與數據提取無關的擴展業務邏輯例程
。有兩個選項決定這些例程的位置:數據庫的存儲過程或 XSL 中的腳本。腳本的效率不夠高,而結構化查詢語言 (SQL) 可能不是最佳語言。
-
擴展字符串,尤其是結果集合的處理
。此規則的例外情況是存儲在 XML 或 HTML 數據庫中的轉義字符串。SQL Server 2000 的一個新功能將自動完成這項工作。有關詳細信息,請參閱 SQL Server Books Online 文檔(XML 和 Internet 支持 \ 檢索和編寫 XML 數據 \ 使用 FOR XML 檢索 XML 文檔 \ 使用 EXPLICIT 模式\ F. 指定 cdata 指令)。
- 大量 HTML 輸入 。模板的局限性使其無法通過在設計時已知其格式的 HTTP 請求檢索所有信息,此工作可以使用 ASP 頁完成。
注意!SQL Server 2000 還允許通過 URL 直接訪問數據庫。在其他情況下,允許使用動態模板來幫助解決體系結構方面的很多問題。但是,如果啟用此功能,將允許嘗試刪除數據庫的查詢,因此,如果選擇使用此功能,請確保數據庫的安全性無懈可擊。
總結
SQL Server XML 提供了一種新的觀念,通過允許從數據庫直接檢索 XML,使您的應用可以端對端使用 XML。新的 ISAPI 應用提供了令人滿意的性能,但不一定適用于應用中的所有使用情況。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=3461
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
