了解資料庫分片的入門

創建網站是在 Internet 上設置您的存在的第一步。 為了長期繁榮,您還必須確保您的網站可以擴展以適應增長。 第一步是實現一個可以隨您擴展的資料庫。 否則,您可能會遇到查詢性能緩慢和資料庫中斷的風險。

這篇文章將討論如何使用資料庫分片來實現數據的高可擴展性和可用性。 我們還將討論分片的缺點以及您可以使用的不同分片架構。

什麼是資料庫分片?

分片是一種優化技術,可將表分布在其他資料庫伺服器上。 這就像分區,兩者都涉及將數據分解為更小的子集。 不同之處在於分片將這些子集分發到不同的伺服器,同時將它們分區存儲在一個資料庫中。 這些伺服器使用相同的資料庫引擎和硬體類型來為所有分片實現相似的性能水平。

分片旨在實現無共享架構,消除處理瓶頸和單點故障。

解釋資料庫分片的插圖。分片的一個例子。 (圖片來源:Analytics Vidhya)

您可以通過兩種方式實現分片——水平和垂直。 水平分片按行劃分表,垂直分表按列劃分表。

在這方面,分片就像分區,將大表分成更小的表。

水平分片對於大多數查詢返回行子集的資料庫是有效的,例如一次返回數據(如姓名、地址、電子郵件等)的客戶資料庫。

垂直分片對於查詢返回單列的資料庫是有效的。 例如,如果客戶資料庫分別返回客戶的姓名或電子郵件,您可以將姓名和電子郵件分成不同的集群。

資料庫分片的好處

以下是資料庫分片的一些優點。

改進的水平縮放

您可以垂直或水平擴展資料庫。 垂直擴展是指向伺服器添加更多中央處理器 (CPU) 和隨機存取存儲器 (RAM) 以提高性能。 對於中小型資料庫,垂直擴展是一個有用的解決方案。 但是,隨著數據的增長,垂直擴展變得不可行。 您只能為單個伺服器添加這麼多的功能。

水平縮放更靈活。 它使您能夠通過向系統添加更多伺服器來根據需要擴展資料庫。 這些伺服器中的每一個都為不同的資料庫分片提供資源。 這分散了工作負載並提高了系統處理更多請求的能力。

更快的查詢響應時間

分片只有幾行和幾列。 因此,處理資料庫查詢所需的時間更少。 相比之下,非分片資料庫的查詢可能需要搜索數百甚至數千行。

提高停電情況下的可靠性

資料庫中斷的發生有多種原因,包括意外數據刪除、連接錯誤和網路安全攻擊。 分片可以最大限度地減少中斷的影響。 由於每個分片都是自治的,因此只有受影響的分片會面臨停機。 例如,如果您有四個分片並且其中一個分片出現中斷,則只有 25% 的操作會受到影響。

分片的缺點

雖然分片提高了資料庫的可靠性和可用性,但實現起來很複雜。 使用錯誤的分片架構會降低性能並導致數據丟失。

請務必選擇一種允許在所有分片之間平衡數據分布的分片技術。 如果沒有這種平衡,您可能會創建資料庫熱點,當一個分片存儲大部分數據而其他分片實際上是空的時,就會發生這種情況。 這會降低單個分片的寫入吞吐量。

為了解決這個問題,您可以進一步對不平衡的分片進行分區,但該過程具有挑戰性,並且可能會在您遷移數據時關閉您的資料庫。

訂閱時事通訊

想知道我們是如何將流量提高到 1000% 以上的嗎?

加入 20,000 多人的行列,他們會通過 WordPress 內幕技巧獲得我們的每周時事通訊!

現在訂閱

分片的另一個缺點是涉及不同分片中多個表的 SQL 連接可能會變得太慢並降低性能。 但是,使用正確的架構,您可以避免這個問題。

分片架構

您可以使用三種架構實現分片:

  • 基於密鑰的分片
  • 基於範圍的分片
  • 基於目錄的分片

您選擇的架構取決於您的用例。

基於密鑰的分片

在基於鍵或散列的分片架構中,資料庫應用程序使用分片鍵來定位分片。 散列函數對分片鍵值進行散列,輸出將數據映射到特定分片。 一個簡單的散列函數可以是鍵的模數和分片的數量。

散列函數可以採用多個分片鍵。 因此,基於鍵的分片適用於可能具有共享鍵的數據記錄。 以演算法方式分布數據可最大限度地減少創建資料庫熱點的可能性,其中一個分片包含比另一個分片更多的數據。

但是,由於分布僅依賴於散列函數,因此不可能在邏輯上將數據分組在一起。 因此,需要來自多個分片的數據的資料庫操作可能效率低下,因為它們需要從每個分片讀取數據。

基於範圍的分片

基於範圍的分片涉及根據指定的值範圍對資料庫進行分片。

它使用分片鍵來確定將值分配給哪個分片。 資料庫應用程序在查找表中檢查與分片鍵對應的分片並存儲數據。 正因為如此,基於範圍的分片很容易設計和實現。

例如,您可以使用用戶資料庫中的用戶 ID 值作為分片鍵。 您可以將 ID 介於 0 到 2,000 之間的用戶存儲在一個分片上,將 2,000 到 4,000 之間的用戶存儲在另一個分片上,依此類推。

基於範圍的分片會導致資料庫熱點。 考慮一個用戶資料庫,其中大部分用戶 ID 位於 2,001 到 4,000 之間。 該過程將它們分配給單個分片,隨著時間的推移產生不平衡。 因此,基於範圍的分片最適合均勻分布的數據。

基於目錄的分片

基於目錄的分片將邏輯相關的數據分組在同一個分片中。 它使用一個查找表,其中包含資料庫中每個實體的映射列表。 每個映射對應一個資料庫分片。

基於目錄的分片比基於範圍或基於鍵的分片更靈活,因為您可以動態地將數據添加到分片。 沒有可遵循的分片功能或範圍內的值。 這種靈活性提高了資料庫效率:您可以將相關數據存儲在一個分片中,這意味著執行常見查詢需要更少的時間。

例如,如果您使用基於目錄的分片並根據用戶的位置對用戶進行分組,從特定位置檢索用戶,您只需查詢單個分片。

使用 Kinsta 進行資料庫分片

大多數現代資料庫引擎都提供資料庫分片支持。 其中一個資料庫引擎是 MariaDB,它是 MySQL 的商業支持分支。 它是 IBM、GitHub 和 Wikimedia 等公司採用的高性能開源資料庫系統。 它也是 Kinsta 高性能伺服器堆棧的一部分。

MariaDB 通過蜘蛛存儲引擎提供內置的分片功能。 蜘蛛存儲引擎是支持分區和擴展架構 (XA) 事務的集群形成引擎。 它允許您將來自不同實例的遠程表視為在同一個實例中。 在蜘蛛存儲引擎中創建表後,該表將鏈接到遠程 MariaDB 伺服器中的另一個表。 建立連接後,存儲引擎將與屬於同一事務的所有表共享該鏈接。

概括

資料庫分片是一種擴展技術,它將表劃分為更小的子集,並將它們分布到稱為分片的不同伺服器上。 您可以通過多種方式實現分片,例如基於鍵的分片、基於範圍的分片和基於目錄的分片。

雖然分片提高了資料庫的可擴展性、可靠性和可用性,但實現起來非常複雜。 此外,一旦創建了分片,將資料庫恢復到未分片狀態並不容易。 因此,僅當您確定其他可伸縮性選項不起作用時才使用分片進行優化。

無論您的企業是非營利組織還是企業級企業,Kinsta 的專家解決方案都可以消除您對網站託管的擔憂,讓您專註於最重要的事情。

通過以下方式節省時間、成本並最大限度地提高站點性能:

  • 來自 WordPress 託管專家的即時幫助,24/7。
  • Cloudflare 企業集成。
  • 全球受眾覆蓋全球 35 個數據中心。
  • 通過我們內置的應用程序性能監控進行優化。

所有這些以及更多,在一個沒有長期合同、協助遷移和 30 天退款保證的計劃中。 查看我們的計劃或與銷售人員交談以找到適合您的計劃。

相關文章