本文說明向外擴充資料庫系統的兩個選項,從而實現更高的可擴充性:水平資料劃分和垂直資料劃分。
當我提到向外擴充資料庫系統時,我實際上只是討論對資料庫系統進行分割或劃分,以便你能利用那些部分,把它們分配到單獨的資料庫伺服器上。這允許你在許多伺服器間分散處理能力,以適應不斷擴張的增長。
但是,額外的特性和功能需要更高的複雜程度。一個向外擴充的資料庫很難進行設計或管理。在你成功對一個資料庫系統實行向外擴充之前,你必須解決許多困難的商業和技術難題。
本文說明向外擴充資料庫系統的兩個選項,從而實現更高的可擴充性:水平資料劃分和垂直資料劃分。
水平資料劃分
使用水平資料劃分,資料庫結構在資料庫執行個體方面沒有變化。通常,資料庫之間唯一的不同在於執行個體包含的資料不同。
開發出中介層應用程式,使得執行個體間的資料得到適當維護,是這種解決方案的特點。可能很難決定如何在資料庫執行個體間劃分資料。資料分配方法十分關鍵,因為我們需要在不同伺服器間比較平均地分散資料負載。不進行這種平均分割,你就無法取得向外擴充資料庫的任何好處,因為查詢或交易處理的大部分IO仍然只發生在一台伺服器上。
既然全部資料不再儲存在一台伺服器上,因此在必要時更難對所有資料執行查詢。幸運的是,你可以建立分布式劃分視圖串連兩個伺服器執行個體間的資料,使得資料看起來就像儲存在一台伺服器上。有一些特殊的視圖,它們利用已連線的服務器和在資料表上建立的約束,有效地返回資料,就好像你只查詢一台伺服器上的資料一樣。(我將在下周的文章中詳細討論分布式劃分視圖。)
另外,值得一提的是,如果伺服器處在不同的地理位置,它們的效能可能會受到影響。在這種情況下,你可能希望複製執行個體間的資料,以便每台伺服器擁有完整的資料,但只負責維護特定的一塊資料。
垂直資料劃分
垂直資料劃分包括把資料庫表分割成在不同伺服器上儲存的不同資料庫執行個體。每台伺服器一般分配完成一個特殊的任務。這樣就可以對那些表中的IO進行分割。這種類型的分割取決於將系統邏輯地劃分成許多部分,以便這些部分能夠獨立操作。如果執行個體間需要最少量的互動進行交易處理,這種處理就很有必要。
例如,如果你的資料庫系統維護銷售、營銷和廣告資料,最好是把這些表分割成單個的資料庫執行個體,阻止它們共用同一台伺服器上的IO。可能你還需要處理這兩個共用一些相同資料(例如客戶資料)的系統。能夠分割這些商業功能,你就可以在必要時向外擴充資料庫環境,提高系統效率。
你可以採取一些措施,如在每一台伺服器上使用相互串連的表和視圖,以便執行個體可以從其它執行個體中查看資料。這樣做可以減少應用程式層決定在哪找到它需要的資料時所需的額外計算量。你需要保證應用程式層具有必要的邏輯性,以決定將資料儲存在哪台伺服器上。
修改
你可以對水平和垂直資料劃分方法進行修改,使其更好地適應你的環境。例如,你可以使用一個面向服務的架構在伺服器間分配處理能力;應用複製確保資料庫執行個體相互之間保持緊密同步;以及組合應用這些技巧。