一般人們會選擇縱向擴展(scale up)SQL Server數據庫,而非橫向擴展(scale out)。縱向擴展很容易:增加硬件、處理能力、內存、磁盤和提高網絡速度。其原理就是仍然在一台服務器上運行數據庫,但是增加了服務器的處理能力和資源。這種方法很昂貴,但是非常簡單直接。
采用雲技術
有時候,最簡單的方法就是將問題交由其他人處理。微軟的Windows Azure雲服務包含一個基於雲的SQL Server版本SQL Azure.這在技術上並非真正意義的橫向擴展,因為它是一種無限縱向擴展方法。所以,轉移到Azure並不需要對您的應用程序進行大改動。實際上,您只需要將應用程序遷移到SQL Azure,然後支付存儲、處理和數據傳輸費用。這些都是收費服務,但是您不需要再擔心擴展問題。
復制
SQL Server原生復制是一種支持橫向擴展的解決方案,與數據庫的創建和使用方式有關。您只需要在多台服務器上復制多個數據庫副本,然後將不同的用戶指向各台服務器。這種方法通常最適合支持地理位置分散的用戶,如亞洲辦公室的用戶使用服務器1,而北美辦公室的用戶則使用服務器2.每一台服務器都擁有完整的數據副本,並且會復制伙伴服務器的所有修改。
這種方法不支持自動負載均衡,並且最適合用在用戶固定只使用一部分數據的情況。換而言之,如果亞洲用戶只需要編輯與他們辦公室相關的數據--例如,主要是亞洲客戶的信息,那麼復制能夠保證其他數據庫副本也包含這些記錄的副本。如果所有用戶都需要編輯完整的數據集,那麼復制就變得有一些復雜,因為SQL Server必須在支持用戶的同時,編輯位於不同服務器的同一個數據。
SQL Server的合並復制能夠處理這種沖突,但是您必須進行一些自定義合並編程,這意味著您的開發人員必須開發一些算法,確定用戶並發訪問數據時誰獲取編輯權限。客戶應用程序也需要增加編程;使它們不僅向數據庫提交數據修改,也要循環檢查這些修改是否被其他並發用戶重寫。用戶也需要重新培訓,因為客戶端應用程序可能會提示:"您正在編程的數據已經發生變化。您需要重新檢查,確定您的編輯是否仍然有效。"
聯合數據庫
另一個重要的橫向擴展方法是聯合。通過這種方法,您可以將數據庫劃分到多台服務器上。垂直分割將同一個表的不同行保存到不同的服務器上。同時,地理分區是最常用的方法:將所有亞洲數據記錄保存在一台服務器上,而所有歐洲數據則保存在另一台服務器上。這種方法不同於整體復制:每一個位置的服務器都不具備完整的數據庫,而只擁有該位置的數據。通過實現一種SQL Server分布式分區視圖而形成完整的表,用戶就可以浏覽一個"聯合"或組合的數據視圖。水平分割則將表的字段保存在不同的服務器上,因此各台服務器一起協作構成組合的表。
這些數據庫的創建並不簡單,其中涉及一種整體操作。您需要掌握關於數據訪問和使用的詳細信息,才能夠實現正確的部署。此外,您還需要一位SQL Server數據庫架構師,他應該全面理解這些技術,分析您的業務情況,並且能夠正確地創建這些組件。
在一些情況中,實現這種橫向擴展對客戶端應用程序的改動很小。對於本身在設計上大量使用視圖和存儲過程進行數據訪問的應用程序,更是如此。因為這些元素只是是在後台抽象,在客戶端上不會發生變化。但是,這些應用程序並不常見;通常,實現橫向擴展都需要修改客戶端程序,使客戶端與後台結構分離。
橫向擴展並不簡單
毫無疑問,實現SQL Server橫向擴展非常復雜--這也是Azure等雲數據庫系統流行的原因之一。此外,有一些第三方供應商能夠幫助實現橫向擴展技術,而不需要完全依賴SQL Server的原生特性。您需要自己下功夫了解這些方法,理解數據訪問和使用方法,這樣才能夠選擇最符合您要求的方法。