什麼是資料庫分區?
資料庫分區是跨多台機器儲存大型資料庫的程序。單台機器或單個資料庫伺服器只能儲存和處理有限數量的資料。資料庫分區透過將資料分成更小的區塊 (稱為碎片),並將它們儲存在多個資料庫伺服器中來克服此限制。所有資料庫伺服器通常採用相同的底層技術,並彼此協作以儲存和處理大量資料。
為什麼資料庫分區很重要?
隨著應用程式的增長,應用程式使用者的數量及其存放的資料量隨時間的推移而增加。如果資料磁碟區變得太大,而且太多使用者嘗試使用應用程式同時讀取或儲存資訊,資料庫就會成為瓶頸。該應用程式會降低速度並影響客戶體驗。資料庫分區是解決此問題的方法之一,因為它可以在碎片中對較小的資料集進行平行處理。
資料庫分區有哪些優勢?
組織使用資料庫分區來取得以下優勢:
改善回應時間
在單一大型資料庫上擷取資料需要的時間更長。資料庫管理系統需要透過多列來進行搜尋,以擷取正確的資料。相比之下,資料碎片的列數少於整個資料庫。因此,從碎片資料庫擷取特定資訊或執行查詢所需的時間更少。
避免整體服務中斷
如果託管資料庫的電腦失敗,依賴於該資料庫的應用程式也會失敗。資料庫分區透過將部分資料庫分發到不同的電腦,來防止該情況。其中一部電腦失敗不會關閉應用程式,因為它可以與其他功能碎片一起運作。 此外,分區也經常與跨碎片的資料複寫一起完成。因此,如果一個碎片變得無法使用,可以從替代碎片存取和復原資料。
有效擴展
不斷增長的資料庫會取用更多運算資源,並最終達到儲存容量。組織可以使用資料庫分區來增加更多運算資源,以支援資料庫擴展。他們可以在執行時間新增碎片,而無需關閉應用程式進行維護。
資料庫分區如何運作?
資料庫將資訊存放在包含欄和列的多個資料集中。資料庫分區將單一資料集分割為分區或碎片。每個碎片都包含唯一的資訊列,您可以在多部電腦上單獨存放這些資訊,稱為節點。所有碎片在單獨的節點上執行,但共用原始資料庫的結構模式或設計。
例如,包含客戶記錄資料集的未分區資料庫可能看起來像這樣。
客戶 ID |
名稱 |
州 |
1 |
John |
加利佛尼亞州 |
2 |
Jane |
華盛頓州 |
3 |
Paulo |
亞利桑那州 |
4 |
Wang |
喬治亞州 |
分區涉及從資料表中分隔不同的資訊列,並將其存放在不同的機器上,如下所示。
電腦 A
客戶 ID |
名稱 |
州 |
1 |
John |
加利佛尼亞州 |
2 |
Jane |
華盛頓州 |
電腦 B
客戶 ID |
名稱 |
州 |
3 |
Paulo |
亞利桑那州 |
4 |
Wang |
喬治亞州 |
碎片
分區資料區塊稱為邏輯碎片。存放邏輯碎片的機器稱為實體碎片或資料庫節點。實體碎片可能包含多個邏輯碎片。
碎片索引鍵
軟體開發人員使用碎片索引鍵,來判斷資料集的分割方式。資料集中的資料欄確定要將哪些資料列分組在一起,以形成碎片。資料庫設計人員從現有資料欄選擇碎片索引鍵,或建立新的資料欄。
無共用架構
資料庫分區在無共用架構上運作。每個實體碎片獨立運作,並且不知道其他碎片。只有包含您請求資料的實體碎片,才會為您平行處理資料。
軟體層對多個碎片的資料儲存和存取進行協調。例如,某些類型的資料庫技術具有內建的自動分區功能。此外,軟體開發人員還可以在應用程式中撰寫分區程式碼,以便從正確的碎片或多個碎片中存放或擷取資訊。
資料庫分區的方法是什麼?
資料庫分區方法將不同的規則套用至碎片鍵,以確定特定資料列的正確節點。以下是常見的分區架構。
以範圍為基礎的分區
以範圍為基礎的分區 (或動態分區) 會根據值範圍分割資料庫列。然後,資料庫設計人員向相應的範圍指派一個碎片索引鍵。例如,資料庫設計人員會根據客戶名稱中的第一個字母來分割資料,如下所示。
名稱 |
碎片索引鍵 |
以 A 至 I 開頭 |
A |
以 J 至 S 開頭 |
B |
以 T 至 Z 開頭 |
C |
當寫入客戶記錄到資料庫時,應用程式透過檢查客戶的名稱,來判斷正確的碎片索引鍵。然後,應用程式將索引鍵與其實體節點比對,並將該列存放在該電腦上。同樣,應用程式會在搜尋特定記錄時執行反向比對。
優點與缺點
視資料值而定,以範圍為基礎的分區可能會導致單一實體節點上的資料多載。在我們的範例中,碎片 A (包含以 A 至 I 開頭的名稱) 可能包含的資料列數比碎片 C (包含以 T 至 Z 開頭的名稱) 要多得多。但是,它更容易實作。
雜湊分區
雜湊分區使用稱為雜湊函數的數學公式,將碎片索引鍵支配給資料庫的每一列。雜湊函數從資料列中獲取資訊,並產生一個雜湊值。應用程式使用雜湊值作為碎片索引鍵,並將資訊存放在對應的實體碎片中。
軟體開發人員使用雜湊分區,在多個碎片之間平均分佈資料庫中的資訊。例如,該軟體將客戶記錄分為兩個碎片,其替代雜湊值為 1 和 2。
名稱 |
雜湊值 |
John |
1 |
Jane |
2 |
Paulo |
1 |
Wang |
2 |
優點與缺點
雖然雜湊分區可使實體碎片之間的資料分佈均勻,但並不會根據資訊的含義來分隔資料庫。因此,軟體開發人員在新增更多實體碎片到運算環境時,可能面臨重新指派雜湊值的困難。
目錄分區
目錄分區使用查詢表,來比對資料庫資訊與對應的實體碎片。查詢表類似於工作表上的表格,可將資料庫欄關聯至碎片索引鍵。例如,下圖顯示了服裝顏色的查詢表。
顏色 |
碎片索引鍵 |
藍色 |
A |
紅色 |
B |
黃色 |
C |
黑色 |
D |
當應用程式將服裝資訊存放在資料庫時,它會參照查詢表。如果連衣裙是藍色的,則應用程式會將資訊存放在相應的碎片中。
優點與缺點
軟體開發人員會使用目錄分區,因為它很靈活。每個碎片都是資料庫具有意義的呈現,並且不受範圍的限制。但是,如果查詢表包含錯誤的資訊,則目錄分區會失敗。
地理位置分區
地理位置分區根據地理位置,來分割和存放資料庫資訊。例如,約會服務網站使用資料庫來存放各個城市的客戶資訊,如下所示。
名稱 |
碎片索引鍵 |
John |
加利佛尼亞州 |
Jane |
華盛頓州 |
Paulo |
亞利桑那州 |
軟體開發人員使用城市作為碎片索引鍵。它們將每個客戶的資訊存放在地理位置位於各個城市的實體碎片中。
優點與缺點
由於碎片與客戶提出請求之間的距離較短,地理位置分區可以使應用程式更快地擷取資訊。如果資料存取模式主要以地理位置為基礎,則會很有效。但是,地理位置分區也可能導致資料分佈不均勻。
如何最佳化資料庫分區,以實現均勻的資料分佈
當特定實體碎片上發生資料多載,但其他實體碎片仍然載入不足時,會導致資料庫熱點。熱點會減慢資料庫上的擷取程序,從而破壞資料分區的目的。
良好的碎片索引鍵選擇,可以將資料平均分佈到多個碎片中。選擇碎片索引鍵時,資料庫設計人員應考慮下列因素。
基數
基數描述了碎片索引鍵的可能值。它確定了單獨的資料欄導向型資料庫可能的碎片數目上限。例如,如果資料庫設計人員選擇「是/否」資料欄作為碎片索引鍵,則碎片數目會限制為兩個。
頻率
頻率是在特定碎片中存放特定資訊的概率。例如,資料庫設計人員會選擇「年齡」作為健身網站的碎片索引鍵。大多數記錄可能會進入 30-45 歲訂閱者的節點,並導致產生資料庫熱點。
單純變更
單純變更是碎片索引鍵的變更速率。單純增加或減少碎片索引鍵會導致碎片不平衡。例如,意見回饋資料庫會分割成三個不同的實體碎片,如下所示:
- 碎片 A 會存放已購買 0–10 次客戶的意見回饋。
- 碎片 B 會存放已購買 11–20 次客戶的意見回饋。
- 碎片 C 會存放已購買 21 次或更多次客戶的意見回饋。
隨著業務的增長,客戶將購買超過 21 次或更多次。該應用程式將其意見回饋存放在碎片 C 中。這會導致碎片不平衡,因為碎片 C 包含的意見回饋記錄比其他碎片更多。
資料庫分區有哪些替代方案?
資料庫分區是一種水平擴展策略,可分配額外的節點或電腦,以共用應用程式的工作負載。組織因其容錯架構而受益於水平擴展。當一部電腦失敗時,其他電腦將繼續運作而不會中斷。資料庫設計人員可將邏輯碎片分散到多部伺服器,以減少停機時間。
但是,分區是其他幾種資料庫擴展策略之一。探索一些其他技術並了解其比較方式。
垂直擴展
垂直擴展可增加單一機器的運算能力。例如,IT 團隊會將 CPU、RAM 和硬碟新增至資料庫伺服器,以處理不斷增加的流量。
資料庫分區和垂直擴展比較
垂直擴展的成本較低,但您可以垂直擴展的運算資源卻有限制。同時,分區是一種水平擴展策略,更容易實作。例如,IT 團隊會安裝多部電腦,而不是升級舊電腦硬體。
複寫
複寫是一種技術,可精確複製資料庫,並將其存放在不同的電腦上。資料庫設計人員使用複寫來設計容錯關聯式資料庫管理系統。當其中一部託管資料庫的電腦失敗時,其他複本仍可運作。複寫是分散式運算系統中常見的實務。
資料庫分區和複寫比較
資料庫分區不會建立相同資訊的副本。而是將一個資料庫分割為多個部分,並將其存放在不同的電腦上。與複寫不同的是,資料庫分區不會導致高可用性。 分區可與複寫結合使用,以實現擴展性和高可用性。
在某些情況下,資料庫分區可能包含特定資料集的複寫。例如,向美國和歐洲客戶銷售產品的零售商店,可能會將大小轉換表的複本存放在兩個區域的不同碎片上。應用程式可以使用轉換表的複本來轉換量測大小,而無需存取其他資料庫伺服器。
資料分割
分區是將資料庫資料表分割為多個群組的程序。分區分為兩種類型:
- 水平分區按資料列分割資料庫。
- 垂直分區建立資料庫欄的不同分區。
資料庫分區和分割比較
資料庫分區就像是水平分割。這兩個程序會將資料庫分割成多個具有唯一資料列的群組。分割會將所有資料群組存放在同一部電腦,但資料庫分區會將其分散至不同的電腦。
資料庫分區有哪些挑戰?
在實作資料庫分區時,組織可能會面臨這些挑戰。
資料熱點
由於資料分佈不均勻,某些碎片會變得不平衡。例如,包含以 A 開頭客戶名稱的單一實體碎片會比其他碎片接收的資料更多。此實體碎片將比其他碎片使用更多的運算資源。
解決方案
您可以使用最佳碎片索引鍵,來平均分佈資料。有些資料集比其他資料集更適合分區。
操作複雜性
資料庫分區會帶來操作複雜性。開發人員必須管理多個資料庫節點,而不是管理單一資料庫。當他們擷取資訊時,開發人員必須查詢多個碎片,並將資訊組合在一起。這些擷取操作可能會使分析複雜化。
解決方案
在 AWS 資料庫產品組合中,會在較大程度上自動化資料庫設定和操作。這讓使用分區資料庫架構成為更加精簡的任務。
基礎設施成本
當組織將更多電腦新增為實體碎片時,支付的基礎設施成本也會更多。如果您增加內部部署資料中心的機器數量,則維護成本可能也會增加。
解決方案
開發人員使用 Amazon Elastic Compute Cloud (Amazon EC2) 在雲端託管和擴展碎片。您可以使用 AWS 完全管理的虛擬基礎設施來節省資金。
應用程式複雜度
大多數資料庫管理系統都沒有內建的分區功能。這意味著資料庫設計人員和軟體開發人員必須手動分割、分佈和管理資料庫。