" />
數據庫分片是將數據分成更小的稱為“分片”的片段的過程分片通常在需要擴展寫入時引入。在一個成功的應用程序的生命周期中,數據庫服務器將達到它在處理或容量級別上可以執行的最大寫入次數。將數據分割成多個碎片——每個碎片位于自己的數據庫服務器上——減少了每個節點的壓力,有效地增加了整個數據庫的寫入容量。這就是數據庫分片。
分布式SQL是一種擴展關系數據庫的新方法,它采用一種完全自動化的、對應用程序透明的類似分片的策略。分布式SQL數據庫是從頭開始設計的,幾乎可以線性擴展。在本文中,您將學習分布式SQL的基礎知識以及如何入門。
數據庫分片的缺點
分片帶來了許多挑戰:
數據分區: 決定如何在多個碎片之間劃分數據可能是一個挑戰,因為它需要在數據鄰近性和數據均勻分布之間找到平衡,以避免熱點。
故障處理: 如果一個關鍵節點出現故障,并且沒有足夠的碎片來承載負載,那么如何在不停機的情況下將數據放在一個新節點上呢?
查詢復雜性: 應用程序代碼耦合到數據分片邏輯,需要來自多個節點的數據的查詢需要重新連接。
數據一致性: 確保跨多個碎片的數據一致性是一項挑戰,因為這需要協調跨碎片的數據更新。當同時進行更新時,這可能特別困難,因為可能需要解決不同寫入之間的沖突。
彈性可擴展性: 隨著數據量或查詢數量的增加,可能有必要向數據庫添加額外的碎片。這可能是一個復雜的過程,不可避免地會出現停機,需要手動過程跨所有碎片均勻地重新定位數據。
通過采用多語言持久性(針對不同的工作負載使用不同的數據庫)、數據庫具有本機分片功能的存儲引擎,或者數據庫代理。然而,雖然這些工具有助于解決數據庫分片中的一些挑戰,但它們也有局限性,并且會帶來需要持續管理的復雜性。
什么是分布式SQL?
分布式SQL指的是新一代的關系數據庫。簡單地說,分布式SQL數據庫是一種關系數據庫,具有透明分片對于應用程序來說,這看起來像是一個單一的邏輯數據庫。分布式SQL數據庫被實現為無共享架構以及一個在保持真實性的同時擴展讀取和寫入的存儲引擎酸合規性和高可用性。分布式SQL數據庫具有以下可伸縮性特征NoSQL數據庫這在21世紀初開始流行,但不要犧牲一致性。它們保留了關系數據庫的優勢,并通過多區域彈性增加了云兼容性。
分布式SQL是如何工作的?
為了理解分布式SQL是如何工作的,讓我們以開源軟件兼容的分布式SQL數據庫MariaDB數據庫。工作原理是在節點之間分割數據和索引,并自動執行數據重新平衡和分布式查詢執行等任務。查詢是并行執行的,以盡量減少延遲。數據會自動復制,以確保沒有單點故障。當一個節點出現故障時,會在幸存的節點之間重新平衡數據。添加新節點時也會發生同樣的情況。一個名為再平衡器確保沒有熱點,這是手動數據庫分片面臨的一個挑戰,當一個節點與其他有時可能保持空閑的節點相比,不均衡地必須處理太多事務時,就會出現熱點。
何時不使用分布式SQL
對數據庫進行分片可以提高性能,但也會在節點間的通信級別引入額外的開銷。如果數據庫配置不正確或者查詢路由器沒有優化,這可能會導致性能下降。在每秒10K查詢數或每秒5K事務數不到的應用程序中,分布式SQL可能不是最佳選擇。此外,如果您的數據庫主要由許多小表組成,那么整體數據庫的性能可能會更好。
分布式SQL入門
由于分布式SQL數據庫對于應用程序來說就像是一個邏輯數據庫,因此入門非常簡單。您所需要的是以下內容:
像這樣的SQL客戶端DBeaver, DbGate, DataGrip或任何適用于您的IDE的SQL客戶端擴展
SQL數據庫
碼頭工人讓第二部分變得簡單。