一、业界主要产品
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、排序查询