【分庫分表】sharding-jdbc—解決的問題


一、遇到的問題

隨着互聯網技術和業務規模的發展,單個db的表里數據越來越多,sql的優化已經作用不明顯或解決不了問題了,這時系統的瓶頸就是單個db了(或單table數據太大)。這時候就涉及到分庫分表的問題了,很多開源解決方案來解決這個問題。比如(排名不分先后):

本片主要以sharding-jdbc為例研究下分庫分表的實施方案。

二、sharding-jdbc簡介

  1. Sharding-JDBC是一個開源的適用於微服務的分布式數據訪問基礎類庫。
  2. Sharding-JDBC定位為輕量級java框架,使用客戶端直連數據庫,以jar包形式提供服務,未使用中間層,無需額外部署,無其他依賴,DBA也無需改變原有的運維方式,可理解為增強版的JDBC驅動,舊代碼遷移成本幾乎為零。
  3. Sharding-JDBC完整的實現了分庫分表,讀寫分離和分布式主鍵功能,並初步實現了柔性事務。
  4. 性能比較,摘錄自官方:

三、解決的問題

1. 分庫分表

  • SQL解析功能完善,支持聚合,分組,排序,LIMIT,TOP等查詢,並且支持級聯表以及笛卡爾積的表查詢
  • 支持內、外連接查詢
  • 分片策略靈活,可支持=,BETWEEN,IN等多維度分片,也可支持多分片鍵共用,以及自定義分片策略
  • 基於Hint的強制分庫分表路由

2. 讀寫分離

  • 獨立使用讀寫分離支持SQL透傳
  • 一主多從的讀寫分離配置,可配合分庫分表使用
  • 基於Hint的強制主庫路由

3. 柔性事務

  • 最大努力送達型事務
  • TCC型事務(TBD)

4. 分布式主鍵

  • 統一的分布式基於時間序列的ID生成器

5. 兼容性

  • 可適用於任何基於java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC
  • 可基於任何第三方的數據庫連接池,如:DBCP, C3P0, BoneCP, Druid等
  • 理論上可支持任意實現JDBC規范的數據庫。目前支持MySQL,Oracle,SQLServer和PostgreSQL

6. 靈活多樣的配置

  • Java
  • YAML
  • Inline表達式
  • Spring命名空間
  • Spring boot starter

7. 分布式治理能力 (2.0新功能)

  • 配置集中化與動態化,可支持數據源、表與分片策略的動態切換(2.0.0.M1)
  • 客戶端的數據庫治理,數據源失效自動切換(2.0.0.M2)
  • 基於Open Tracing協議的APM信息輸出(2.0.0.M3)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM