數據庫高可用:SQL Server橫向擴展:設計,實現與維護(2)- 分布式分區視圖(上)


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

之前我們已經發布了一些與數據庫擴展相關的文章,很多朋友表示非常的感興趣,而且也說到了大家的痛處,在大家的呼聲下,我們團隊再次整理和撰寫本系列文章。


在本篇文章中,我們將會講述分布式分區視圖如何設計和實現,也會講述如何在實際中使用分布式分區視圖,最后會講述分布式分區視圖使用的一些場景和優缺點。

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


 

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


首先,分布式分區視圖是一個橫向擴展的方案(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提供程序就可以訪問遠程的存儲引擎的反問方法。

 

待續!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM