SQL Server分布式分區(qū)視圖簡介
我們大家都知道SQL Server分布式分區(qū)視圖能使來自一個或是多個SQL Server數(shù)據(jù)庫中的數(shù)據(jù)簡潔的連接起來。當開發(fā)一個水平來分區(qū)數(shù)據(jù)庫環(huán)境時,你可以使用分布式分區(qū)視圖將來自不同服務器的分區(qū)表連接起來,使得這些數(shù)據(jù)看起來像來自同一個服務器。
你可以設計這些視圖,因此,如果你的潛在數(shù)據(jù)表結(jié)構(gòu)設計合理的話,查詢優(yōu)化器就可以知道從那個數(shù)據(jù)表得到查詢需要的數(shù)據(jù),從而加速運行。一個設計合理的SQL Server分布式分區(qū)視圖還可以實現(xiàn)更新、插入和刪除。我們將在本文的下一部分深入探討它是如何實現(xiàn)這樣操作的。
示例
本例中,我們假設SalesHistory表非常大,如果水平分割表中的各行記錄到不同的服務器上,這將對我們很有利。每個服務器上的SalesHistory表的表結(jié)構(gòu)是一樣的,不過,一臺服務器上存放該國東部地區(qū)的銷售信息,而另外一臺存放該國西部地區(qū)的銷售信息。
我們根據(jù)Region(地區(qū))字段和SaleID 來區(qū)分表中的各條記錄。其中SaleID字段是整型數(shù)據(jù)域,我們?yōu)樵搰煌牡貐^(qū)設定了不同的SaleID。
這個字段對于設計概念來說非常重要,因為這是我們用來作為分區(qū)鍵值字段。(注意:要在縮小場景中進行表的設計,這一點極其重要,因為這樣表中的各行是唯一的,從而可區(qū)別于其它服務器上的表。)這個字段集合是分區(qū)鍵。
設計很多SaleHistory表,根據(jù)所在的表SaleID始終是唯一可區(qū)別的。我們可以通過CHECK約束來實現(xiàn)這一點。
我們將使用兩個獨立的SQL Server實例,對于本例,這兩個實例在同一臺機器上。服務器的名字叫Chapman,實例分別稱為實例A和實例B。這兩個實例都是SQL Server 2005開發(fā)版,允許遠程連接以及Windows和SQL Server認證。
使用腳本創(chuàng)建SalesDB數(shù)據(jù)庫,設置每臺服務器的lazy schema validation選項,使用該選項在SQL Server中通過確保在確實需要服務器上的數(shù)據(jù)時才進行服務器鏈接請求來提高性能。
列表A中的腳本需要在兩個數(shù)據(jù)庫實例上運行。SQL Server分布式分區(qū)視圖列表B用來創(chuàng)建SalesDB數(shù)據(jù)庫中的讀者登錄及用戶,該腳本也需要在兩個數(shù)據(jù)庫實例上運行。
列表A:
- CREATE DATABASE SalesDB; EXECUTE sp_serveroption @server = 'CHAPMANServerA, @optname = 'lazy schema validation',@optvalue = 'true'
列表B:
- CREATE LOGIN reader WITH Password = '654asod3e**!!' USE SalesDB CREATE USER reader FROM LOGIN reader
列表C:
- ServerA: EXECUTE sp_addlinkedserver 'CHAPMANServerB',
- 'SQL Server' EXEC sp_addlinkedsrvlogin 'CHAPMANServerB', 'false',NULL,'reader',
- '654asod3e**!!' ServerB: EXEC sp_addlinkedserver 'CHAPMANServerA', 'SQL Server'
- EXEC sp_addlinkedsrvlogin 'CHAPMANServerA', 'false',NULL,'reader','654asod3e**!!'
列表C將獨自在每臺數(shù)據(jù)庫實例上運行。該腳本在每臺服務器上創(chuàng)建一個鏈接到對方的鏈接服務器。連接服務器允許SQL Server依靠某個OLEDB數(shù)據(jù)源來執(zhí)行命令,就像其它的SQL Server。
我們使用上面的腳本中創(chuàng)建的登錄作為連接服務器進行連接的安全上下文。這些鏈接服務器允許我們從一臺服務器查詢另一臺服務器。
上述的相關內(nèi)容就是對SQL Server分布式分區(qū)視圖分解數(shù)據(jù)表的描述,希望會給你帶來一些幫助在此方面。
【編輯推薦】