首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server XML 與 Web 應用架構(二):寫入方物理架構、資料庫為中心模式與整合策略

     編輯:關於SqlServer

一、寫入方物理架構:超越 XML 模板的擴充路徑

SQL Server XML 模板 (HTTP 端點) 高度流程化、效能極佳,但功能受限。當需求超出模板能力時,架構演進路徑:

XML Template (ISAPI)
    ↓ 需求:多伺服器存取、未知 HTTP 格式、COM/COM+、分散式交易、外部 Web Service
Custom ISAPI / ASP + COM+ / ASP.NET Web API / WCF

四層架構圖解

層級職責技術選項XML 角色
表示層UI 渲染、HTTP 協定處理ASP/ASP.NET、XSLT 轉換、AJAXXML 為資料傳輸格式,XSLT 生成 HTML/JSON
工作流層業務流程編排、長時間交易、狀態機COM+、BizTalk、WF、Service BrokerXML 訊息在流程間傳遞
業務邏輯層核心規則、驗證、計算、決策COM+ 元件、.NET 組件、CLR 存儲過程XML 為參數/回傳值,或文件型輸入
資料存取層CRUD、查詢、大量作業、交易控制ADO 2.6 Stream、SqlClient、XML 批次XML 為原生型別,FOR XML/OPENXML/nodes()

關鍵設計原則

  • 全鏈路 XML:從資料庫到瀏覽器統一用 XML,中間層僅做 XSLT 轉換,避免物件映射損耗
  • ADO 2.6 Stream:`Command.Stream` / `Recordset.Stream` 直接傳輸 XML,零複製、高效能
  • 中間層下沉:將驗證、轉換、彙總邏輯下推至存儲過程 (T-SQL/CLR),減少網路往返

二、以資料庫為中心的架構

設計哲學

傳統 n-tier 假設資料庫擴展性最差,盡量輕量。但 SQL Server 2000/2005 引入:

  • 分區檢視 / 分區表:水平擴展讀寫
  • 聯合檢視 / 連結伺服器:邏輯整合異構資料源
  • Service Broker:非同步訊息、鬆耦合
  • CLR 整合:CPU 密集運算下推資料庫

若採用「重資料庫」叢集 (高規格 DB 伺服器),可將業務邏輯分層封裝在資料庫內:

存儲過程分層模式

-- 資料存取層:基礎 CRUD、批次作業
CREATE PROC DAL_InsertOrder @OrderXml XML AS ...

-- 業務邏輯層:規則、計算、驗證
CREATE PROC BLL_ProcessOrder @OrderXml XML AS
BEGIN
    -- 呼叫 DAL、執行規則、回傳結果 XML
    EXEC DAL_ValidateOrder @OrderXml;
    EXEC DAL_CalcPricing @OrderXml OUTPUT;
    EXEC DAL_InsertOrder @OrderXml;
END

-- 工作流層:流程編排、狀態流轉
CREATE PROC WF_SubmitOrder @OrderXml XML AS
BEGIN
    EXEC BLL_ProcessOrder @OrderXml;
    EXEC DAL_LogWorkflow @OrderXml, 'Submitted';
    -- 非同步觸發:Service Broker 發送訊息
    SEND ON CONVERSATION @Handle MESSAGE TYPE OrderSubmitted (@OrderXml);
END

-- 表示層介面:單一進入點
CREATE PROC API_SubmitOrder @OrderXml XML AS
BEGIN
    EXEC WF_SubmitOrder @OrderXml;
    SELECT @OrderXml; -- 回傳結果 XML
END

智慧型存儲過程反模式與優化

-- 反模式:單一大存儲過程含切換邏輯
CREATE PROC SmartProc @Action NVARCHAR(50), @Params NTEXT AS
BEGIN
    EXEC CommonOps;
    IF @Action = 'Action1' EXEC BLL_Action1 @Params;
    ELSE IF @Action = 'Action2' EXEC BLL_Action2 @Params;
    -- 優化器僅為首次執行路徑編譯最佳計劃,其他路徑效能差
END

-- 優化:拆分為獨立存儲過程,共用邏輯抽取為輔助過程
CREATE PROC Proc_Action1 @Params NTEXT AS
BEGIN
    EXEC CommonOps;
    EXEC BLL_Action1 @Params;
END
CREATE PROC Proc_Action2 @Params NTEXT AS
BEGIN
    EXEC CommonOps;
    EXEC BLL_Action2 @Params;
END
-- 每個過程獨立編譯最佳計劃,避免參數嗅探/計劃污染

三、整合策略:架構無縫融合

Web 開發最大優勢:使用者看不見實作細節。可將多種架構混合部署:

  • 全鏈路 XML:任何技術棧皆可產生/消費 XML,XSLT 無縫轉換
  • 漸進式遷移**:舊模組維持 XML 模板/ISAPI,新模組採 ASP.NET Core + EF Core,共用資料庫 XML 型別
  • 微服務邊界**:以資料庫結構描述/存儲過程介面為契約,服務獨立部署
  • 事件驅動整合**:Service Broker / Kafka / RabbitMQ 傳遞 XML 事件,解耦寫入/讀取

四、實戰部署檢查清單

  1. [ ] 所有層級輸入/輸出定義 XSD 結構描述,納入版控
  2. [ ] 資料庫 XML 欄位綁定結構描述集合,強制驗證
  3. [ ] 存儲過程介面版本化:`API_v1_SubmitOrder`、`API_v2_SubmitOrder`
  4. [ ] XSLT 樣式表獨立部署,支援熱更新無需重啟應用
  5. [ ] ADO Stream / SqlXml 非同步管線配置,避免大型 XML 封鎖執行緒
  6. [ ] 監控:XML 剖析耗時、驗證失敗率、存儲過程編譯/重編譯頻率
  7. [ ] 安全:XML 外部實體 (XXE) 防護、XSLT 腳本沙箱、參數化存儲過程防注入

本系列結束。核心啟示:SQL Server XML 能力已超越單純資料交換,配合原生 XML 型別、XQuery、CLR、Service Broker,可構建高效能、強型別、可擴展的以資料為中心應用架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved