1.簡介
Sharding-JDBC是噹噹應用框架ddframe中,從關係型數據庫模塊dd-rdb中分離出來的數據庫水平分片框架,實現透明化數據庫分庫分表訪問。
它直接封裝JDBC協議,可以理解爲增強版的JDBC驅動,舊代碼遷移成本幾乎爲零。
它定位爲輕量級java框架,使用客戶端直連數據庫,以jar包形式提供服務,無proxy代理層,無需額外部署,無其他依賴,DBA也無 需改變原有的運維方式。
2.特點
可適用於任何基於java的ORM框架,如:JPA、Hibernate、Mybatis、Spring JDBC Template,或直接使用JDBC 。
可基於任何第三方的數據庫連接池,如:DBCP、C3P0、Durid等。
理論上可支持任意實現JDBC規範的數據庫。目前支持H2,mysql,Oracle,SQLServer,PostgreSQL。
分片策略靈活,可支持等號、between、in等多維度分片,也可支持多分片鍵。
SQL解析功能完善,支持聚合、分組、排序、limit、or等查詢,並支持Binding Table以及笛卡爾積表查詢。
性能高,單庫查詢QPS爲原生JDBC的99.8%,雙庫查詢QPS比單庫增加94%。
3.架構圖
4.核心概念
LogicTable:數據分片的邏輯表,對於水平拆分的數據庫(表)來說,是同一類表的總稱。如:訂單表拆分爲10張表,分表是t_order0到t_order9,他們的邏輯表名爲t_order。
ActualTable:分片數據中真實存在的物理表:t_order0。
DataNode:數據分片的最小單元,由數據源名稱和數據表組成。如:ds1.torder_0。
DynamicTable:邏輯表和物理表不一定需要在配置規則中靜態配置。如,按照日期分片的場景,物理表的名稱隨着時間的推移會產生變化。
BindingTable:指在任何場景下分片規則均一致的主表和子表。例:訂單表和訂單項表,均按照訂單ID分片,則此兩張表互爲BindingTable關係。BindingTable關係的多表關聯查詢不會出現笛卡爾積關聯,查詢效率將大大提升。
ShardingColumn:分片字段用於將數據庫(表)水平拆分的字段。