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提供者就可以訪問遠端儲存引擎的反問方法。
待續!