數據庫分庫分表

一張表數據在 500 - 1000W 之間就需要進行分庫分表操作。
分庫分表之后比如訂單表的訂單id不會再用數據庫表的自增id,而是采用比如雪花算法生成訂單id。
數據庫的垂直拆分和水平拆分是兩種不同的數據分布策略,它們分別用于解決不同類型的數據增長問題。下面我將詳細介紹這兩種拆分方式的概念、應用場景及其優缺點。
垂直拆分
概念:
垂直拆分(Vertical Partitioning),也被稱為縱向拆分,是指按照業務功能模塊將表中的列進行分類,并將其拆分到不同的表中,或者將一組相關的表遷移到新的數據庫實例中。例如,在電子商務系統中,可以將用戶信息相關的表放在一個數據庫中,而商品信息相關的表放在另一個數據庫中。
應用場景:
- 當一張表中有大量不常用的字段時,可以考慮將這些字段拆分出去。
- 當不同業務模塊之間的數據訪問模式差異較大時,可以通過垂直拆分來優化性能。
- 在微服務架構下,每個服務通常會有自己的數據庫,這實際上也是一種垂直拆分的形式。
優點:
- 業務邏輯更加清晰,易于維護和擴展。
- 數據庫表結構簡化,單個查詢可能涉及的IO操作減少,提高查詢效率。
- 可以針對不同的業務需求對各個數據庫進行獨立優化。
缺點:
- 跨庫事務處理變得更加復雜。
- 對于一些需要跨多個子集進行聯合查詢的操作,實現起來較為困難。
- 如果拆分不當,可能導致某些表之間無法直接JOIN,增加了開發復雜度。
水平拆分
概念:
水平拆分(Horizontal Partitioning),又稱為橫向拆分或分片(Sharding),指的是根據某種規則(如哈希值、范圍等)將同一張表的數據分散存儲到多個數據庫實例中。每個數據庫實例都包含相同結構的表,但存儲的是不同的數據行。
應用場景:
- 當單個數據庫實例中的某個表的數據量過大,影響了讀寫性能時,可以采用水平拆分。
- 面對高并發請求場景,通過增加數據庫實例的數量來分散負載壓力。
優點:
- 可以有效避免單點瓶頸,支持大規模數據和高并發訪問。
- 各個分片的數據相對獨立,便于局部優化和管理。
- 理論上可以無限擴展,只要增加更多的數據庫節點即可。
缺點:
- 數據分片規則的設計難度較大,需充分考慮到未來擴展性。
- 分布式事務的一致性和完整性難以保證。
- 查詢復雜度增加,特別是涉及到跨分片的聚合操作時。
無論是垂直拆分還是水平拆分,都是為了解決隨著業務發展帶來的數據規模膨脹問題,選擇哪種方式取決于具體的應用場景和技術要求。實踐中往往需要結合兩者的優勢,合理規劃數據庫架構。在實際應用中,還應該注意拆分后的數據庫管理和維護工作,確保系統的穩定性和可擴展性。
hash分表

存在的問題:
比如4張表擴展為8張,算法發生變更,需要把歷史數據按照新算法重新遷移一遍。
range 分表

ShardingSphere 分庫分表

電商分庫分表案例:

關聯查詢:可以將訂單所關聯的表比如訂單詳情表,物流表,都按照同一套算法插入到同一個庫中,此時管理查詢不再跨庫
ShardingSphere
Apache ShardingSphere 是一個開源的分布式數據庫生態系統,它提供了增強現有數據庫的能力,使其能夠支持大規模數據存儲和高并發訪問。ShardingSphere 由 ShardingSphere-JDBC、ShardingSphere-Proxy 和 ShardingSphere-Sidecar(規劃中)這三款相互獨立但可以混合部署的產品組成,它們共同構成了一個完整的分布式數據庫解決方案。
核心功能
-
數據分片:ShardingSphere 支持基于垂直拆分和水平拆分的數據分片策略,可以幫助用戶將單個數據庫表的數據分布到多個數據庫實例上,從而實現數據的橫向擴展。
-
讀寫分離:通過智能路由機制,ShardingSphere 能夠自動將讀操作分配給從庫,而寫操作則指向主庫,以此來分散負載并提高系統的讀取性能。
-
分布式事務:提供對跨數據源的分布式事務的支持,確保在分布式環境下數據的一致性和完整性。
-
數據加密:ShardingSphere 提供了一套透明化的數據加密方案,可以在不修改業務代碼的情況下保護敏感數據的安全。
-
影子庫:用于全鏈路壓測場景下,ShardingSphere 可以配置影子庫來隔離測試數據,避免污染生產環境中的真實數據。
-
聯邦查詢:支持跨不同數據源進行復雜查詢分析,使得用戶可以從多個異構數據庫中獲取所需信息,并進行聚合和關聯。
架構設計
ShardingSphere 的架構采用了微內核+可插拔的設計理念,這意味著其核心功能被抽象成一個個獨立的模塊,用戶可以根據需要靈活組合這些模塊來構建符合自身需求的系統。此外,這種設計還允許第三方開發者為 ShardingSphere 開發新的插件,進一步擴展其功能集。
部署形態
- ShardingSphere-JDBC:作為一個輕量級的 Java 框架,它直接嵌入到應用程序中,通過 JDBC 接口提供服務,無需額外的服務器部署。
- ShardingSphere-Proxy:作為一款透明的數據庫代理,它可以接收任何遵循 MySQL/PostgreSQL 協議的應用請求,因此適用于多語言環境下的應用。
社區和支持
自成為 Apache 軟件基金會的頂級項目以來,ShardingSphere 已經積累了大量的關注者和貢獻者,形成了一個活躍的社區。官方文檔齊全,并且有大量的示例代碼可供學習參考,幫助新手快速入門。
總之,Apache ShardingSphere 為應對現代應用面臨的海量數據處理挑戰提供了一個強大而靈活的工具包,無論是對于初創企業還是大型組織而言,都是一個值得考慮的選擇。
本文來自博客園,作者:chuangzhou,轉載請注明原文鏈接:http://www.rzrgm.cn/czzz/p/18697584

浙公網安備 33010602011771號