mysql自带分表分区策略
mysql 自带有分区分表策略、具体参考mysql 分库分表分区总结_mysql分区实验报告小结-CSDN博客。只能说单库情况下、并且简单的情况如按时间做range分区可以使用mysql自带分区策略。更多的情况下完全要自己代码逻辑实现。
开源解决方案
开源中间件或框架
- cobar
- TDDL
- atlas
- sharding-jdbc 当当开源产品,属于client方案
- mycat 基于cobar改造,属于proxy方案
sharding-jdbc和mycat使用不同的理念,sharding-jdbc目前是基于jdbc驱动,无需额外的proxy,因此也无需关注proxy本身的高可用。Mycat 是基于 Proxy,它复写了 MySQL 协议,将 Mycat Server 伪装成一个 MySQL 数据库,而 Sharding-JDBC 是基于 JDBC 接口的扩展,是以 jar 包的形式提供轻量级服务的。
解决方案
- Proxy 代理模式
- Client 客户端模式
Proxy 代理模式
应用程序和数据库 中间,单独部署一个代理层中间件,所有的连接和数据库操作都发给这个代理层,由代理层去做底层的实现。
(1)事先在代理中间件上配置分片规则、
(2)代理中间件拦截客户端sql、并对sql解析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库
(3)并将返回的结果做适当的处理,最终再返回给用户。
(4)对返回结果进行合并等相关处理处理、并返回给客户端。
这样做对开发人员来说,是完全不需要知道下面做了什么的,甚至不需要做任何的代码改造,就可以完成接入;
常见的框架有:MyCat(支持 MySQL, Oracle, DB2, PostgreSQL, SQL Server等主流数据库,基于Cobar改造的)、Cobar(阿里,已停止维护)、MySQL-Proxy、Atlas(360开源的)、sharing-sphere(当当)等等。