一、業界主要產品
1)商業版數據庫:MySQL Proxy,提供MySQL協議接口(非JDBC),主從結構,可以負載平衡,讀寫分離,failover等,lua語法復雜,不支持大數據量的分庫分表;
2)Amoeba,支持分數據庫實例,每個數據相同的表,不支持事務;類似MySQL Proxy,設計上拋棄lua,更簡單;
3)Cobar,阿里開源的一個完整DAL層,實現完整Spring JDBC代理;阿里集團研究院開源的CobarClient,基於ibatis主要面向小規模的數據庫sharding集群訪問,需要規划數據規模,缺乏擴展性;
開源地址:
cobar:https://github.com/alibaba/cobar
cobarclient:https://github.com/alibaba/cobarclient
4)guzz,多庫(虛擬的數據庫,實際數據庫的路由規則仍然自定義)、表分切、讀寫分離,以及多台數據庫之間透明的分布式事務支持,設計目標是支持大型在線生產應用;需完全替換ibatis;完全和框架不符。
5)TDDL,淘寶的DAL,很強的分庫分表能力,仍然需要數據量實現規划,目前只開源了部分代碼。
開源地址:https://github.com/alibaba/tb_tddl
二、水平分表的主要策略
分表解決單表數據量過大帶來的查詢效率下降問題。
1、按拆分鍵ID范圍方式分片
數據分布不均衡
2、按拆分鍵ID取模分片
擴展表數量會使數據失效
切分為128張表,每個切片存500W條數據,存儲數據 500W * 128 = 640 000 000
3、按拆分鍵ID一致性哈希分片
三、主要問題解決方案
1、關聯查詢
2、分頁查詢
3、排序查詢