Sharding-JDBC是當當應用框架ddframe中,從關系型數據庫模塊dd-rdb中分離出來的數據庫水平分片框架,實現透明化數據庫分庫分表訪問。Sharding-JDBC是繼dubbox和elastic-job之后,ddframe系列開源的第3個項目。
Sharding-JDBC直接封裝JDBC協議,可以理解為增強版的JDBC驅動,舊代碼遷移成本幾乎為零。
Sharding-JDBC定位為輕量級java框架,使用客戶端直連數據庫,以jar包形式提供服務,無proxy代理層,無需額外部署,無其他依賴,DBA也無需改變原有的運維方式。
主要包括以下特點:
- 可適用於任何基於java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
- 可基於任何第三方的數據庫連接池,如:DBCP, C3P0, BoneCP, Druid等。
- 理論上可支持任意實現JDBC規范的數據庫。雖然目前僅支持MySQL,但已有支持Oracle,SQLServer等數據庫的計划。
- 分片策略靈活,可支持等號,between,in等多維度分片,也可支持多分片鍵。
- SQL解析功能完善,支持聚合,分組,排序,limit,or等查詢,並支持Binding Table以及笛卡爾積表查詢。
- 性能高。單庫查詢QPS為原生JDBC的99.8%;雙庫查詢QPS比單庫增加94%。
架構圖
與常見開源產品對比
這里僅列出目前停止更新,但仍然在數據庫分片領域非常有影響力的幾個項目。
功能 | Cobar | Cobar-client | TDDL | Sharding-JDBC |
分庫 | 有 | 有 | 未開源 | 有 |
分表 | 無 | 無 | 未開源 | 有 |
中間層 | 是 | 否 | 否 | 否 |
ORM支持 | 任意 | 僅MyBatis | 任意 | 任意 |
數據庫支持 | 僅MySQL | 任意 | 任意 | 任意 |
異構語言 | 可 | 僅Java | 僅Java | 僅Java |
外部依賴 | 無 | 無 | Diamond | 無 |
Sharding-JDBC嚴格遵循Apache 2.0許可證的要求。測試覆蓋率95%,目前已部署至maven中央倉庫。可使用以下坐標引用:
<groupId>com.dangdang</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>1.0.0</version>
Sharding-JDBC將保持持續更新,后續會完善讀寫分離、柔性分布式事務和高可用等相關功能。
Sharding-JDBC項目GitHub地址:https://github.com/dangdangdotcom/sharding-jdbc