是向外擴展 SQL Server 實現(xiàn)更高擴展性
以下的文章主要介紹的是向外擴展 SQL Server 實現(xiàn)更高擴展性,其中也包括實現(xiàn)更高的可擴展性之水平數(shù)據(jù)劃分,垂直數(shù)據(jù)的劃分,以及修改等相關內容的具體介紹,以下就是文章的主要內容的描述。
當我提到向外擴展SQL Server數(shù)據(jù)庫系統(tǒng)時,我實際上只是討論對數(shù)據(jù)庫系統(tǒng)進行分割或劃分,以便你能利用那些部分,把它們分配到單獨的數(shù)據(jù)庫服務器上。這允許你在許多服務器間分散處理能力,以適應不斷擴張的增長。
但是,額外的特性和功能需要更高的復雜程度。一個向外擴展的數(shù)據(jù)庫很難進行設計或管理。在你成功對一個數(shù)據(jù)庫系統(tǒng)實行向外擴展之前,你必須解決許多困難的商業(yè)和技術難題。
本文說明向外擴展SQL Server數(shù)據(jù)庫系統(tǒng)的兩個選項,從而實現(xiàn)更高的可擴展性:水平數(shù)據(jù)劃分和垂直數(shù)據(jù)劃分。
水平數(shù)據(jù)劃分
使用水平數(shù)據(jù)劃分,數(shù)據(jù)庫結構在數(shù)據(jù)庫實例方面沒有變化。通常,數(shù)據(jù)庫之間唯一的不同在于實例包含的數(shù)據(jù)不同。
開發(fā)出中間層應用程序,使得實例間的數(shù)據(jù)得到適當維護,是這種解決方案的特點??赡芎茈y決定如何在數(shù)據(jù)庫實例間劃分數(shù)據(jù)。數(shù)據(jù)分配方法十分關鍵,因為我們需要在不同服務器間比較平均地分散數(shù)據(jù)負載。不進行這種平均分割,你就無法取得向外擴展SQL Server數(shù)據(jù)庫的任何好處,因為查詢或事務處理的大部分IO仍然只發(fā)生在一臺服務器上。
既然全部數(shù)據(jù)不再保存在一臺服務器上,因此在必要時更難對所有數(shù)據(jù)執(zhí)行查詢。幸運的是,你可以建立分布式劃分視圖連接兩個服務器實例間的數(shù)據(jù),使得數(shù)據(jù)看起來就像保存在一臺服務器上。有一些特殊的視圖,它們利用連接的服務器和在數(shù)據(jù)表上建立的約束,有效地返回數(shù)據(jù),就好像你只查詢一臺服務器上的數(shù)據(jù)一樣。(我將在下周的文章中詳細討論分布式劃分視圖。)
另外,值得一提的是,如果服務器處在不同的地理位置,它們的性能可能會受到影響。在這種情況下,你可能希望復制實例間的數(shù)據(jù),以便每臺服務器擁有完整的數(shù)據(jù),但只負責維護特定的一塊數(shù)據(jù)。
垂直數(shù)據(jù)劃分
垂直數(shù)據(jù)劃分包括把數(shù)據(jù)庫表分割成在不同服務器上保存的不同數(shù)據(jù)庫實例。每臺服務器一般分配完成一個特殊的任務。這樣就可以對那些表中的IO進行分割。這種類型的分割取決于將系統(tǒng)邏輯地劃分成許多部分,以便這些部分能夠獨立操作。如果實例間需要最少量的交互進行事務處理,這種處理就很有必要。
例如,如果你的數(shù)據(jù)庫系統(tǒng)維護銷售、營銷和廣告數(shù)據(jù),***是把這些表分割成單個的數(shù)據(jù)庫實例,阻止它們共享同一臺服務器上的IO??赡苣氵€需要處理這兩個共享一些相同數(shù)據(jù)(例如客戶數(shù)據(jù))的系統(tǒng)。能夠分割這些商業(yè)功能,你就可以在必要時向外擴展SQL Server數(shù)據(jù)庫環(huán)境,提高系統(tǒng)效率。
你可以采取一些措施,如在每一臺服務器上使用相互連接的表和視圖,以便實例可以從其它實例中查看數(shù)據(jù)。這樣做可以減少應用程序層決定在哪找到它需要的數(shù)據(jù)時所需的額外計算量。你需要保證應用程序層具有必要的邏輯性,以決定將數(shù)據(jù)保存在哪臺服務器上。
修改
你可以對水平和垂直數(shù)據(jù)劃分方法進行修改,使其更好地適應你的環(huán)境。例如,你可以使用一個面向服務的架構在服務器間分配處理能力;應用復制確保數(shù)據(jù)庫實例相互之間保持緊密同步;以及組合應用這些技巧。
【編輯推薦】
- 向外擴展SQL Server實現(xiàn)更高擴展性
- SQL Server分布式分區(qū)視圖簡介
- 正確識別SQL Server 版本號的操作方案
- SQL Server子查詢的作用是什么?
- SQL Server 數(shù)據(jù)庫中管理常用的SQL與T-SQL