1. 程式人生 > >SQL Server橫向擴展:設計,實現與維護(2)- 分布式分區視圖

SQL Server橫向擴展:設計,實現與維護(2)- 分布式分區視圖

做的 img attach one 遠程 cnblogs ole out 不同的

為了使得朋友們對分布式分區視圖有個概念,也為了方便後面的內容展開,我們先看看下面一個圖:

講述分布式分區視圖之前,很有必要將之與我們常常熟悉的分區表和索引進行區別。

首先,分布式分區視圖是一個橫向擴展的方案(Scale out),而分區表卻是一個縱向擴展的方案(Scale up)。通過使用分布式分區視圖,我們可以把數據放在多個數據庫實例(或者服務器)上面;使用分區表,我們可以把數據庫中的數據放在同一服務器上的不同的物理文件上。分區表中的分區都在同一個數據庫中,而且裏面的分區不能跨數據庫或者跨服務器。


分區表被分區分割成多個文件組,而這些文件組可以存在於同一個物理磁盤,或者在不同的磁盤上面。另外,分區表中的索引也可以根據分區進行分布。當查詢優化器評估一個數據請求,而且這個請求中涉及到使用分區表,那麽優化器可以優化這個請求只去合適的分區上面尋找合適的數據。(更多有關分區表的知識,大家可以參考我們站點發布的“深入淺出分區表”系列文章

雖然說,我們本篇講述分布式分區視圖,其實在SQL Server 2005(以及後續版本),也是支持“本地分區視圖”,這裏是一個相對的概念。因為在SQL Server2005以後已經有了分區表的引入,所以,很多時候,“本地分區視圖”僅僅只是用來與之前的數據庫版本兼容。現在我們直接采用分區表來替代“本地分區視圖”。

當我們用分區的時候,主要有兩個目的:

1.把歷史的當前數據分開

2.用它來把數據劃分為不同範圍,如把某個大型的Customer表中的數據按照用戶名字的字母順序分開,如A-F,G-N,O-Z,分為三個區。

其實當我們在橫向擴展方案中拆分數據的時候,也會進行一些類似分區的操作,但是,使用分區的時候,情況就沒有在一個數據庫上面使用分區劃分數據那麽的簡單了,因為數據此時已經拆分到了不同的數據庫實例中,甚至不同的服務器上面,,此時,我們就要考慮一些分布式情況,如下:



到現在為止,也說了一些分布式分區視圖的一些概念,朋友可能已經有些迫不及待的要知道如何實現,那麽,我這裏先緩緩。我們先來看幾個與它相關的重要的內容。

假設,現在分布式的視圖已經建立好了,我們下一步要做的就是如何使用它。


下面,我們就談談實現分布式視圖的實現的原理和分布式查詢相關的知識。

分布式分區視圖工作原理

分布式查詢和分布式分區視圖中使用了OLE DB提供程序來實現數據庫實例之間間信息溝通。

訪問遠程數據庫中的數據采用的是Linked Server技術(鏈接服務器)。一個鏈接服務器其實就是位於數據庫實例中的一個對象。查詢引擎是建立在OLE DB之上的,所以,不管是從當前本地的數據庫存儲引擎中檢索數據,還是從遠程的數據庫的存儲引擎中檢索數據,他們的機制都是一樣的。如果大家對數據庫的內部結構稍微知道一點,就非常容易理解這個問題:




朋友們看到上面的圖,查詢引擎(也稱之為“關系引擎”)通過存儲引擎提供的OLE DB接口訪問達到訪問方法。在這裏,OLE DB提供程序就可以訪問遠程的存儲引擎的反問方法。

SQL Server橫向擴展:設計,實現與維護(2)- 分布式分區視圖