分表我们前面有提到过对于mysql,其数据文件是以文件形式存储在磁盘上的 。当一个数据文件过大时,操作系统对大文件的操作就会比较麻烦耗时,且有的操作系统就不支持大文件,这个时候就必须分表了 。另外对于mysql常用的存储引擎是Innodb,它的底层数据结构是B+树 。当其数据文件过大的时候,查询一个节点可能会查询很多层次,而这必定会导致多次IO操作进行装载进内存,肯定会耗时的 。除此之外还有Innodb对于B+树的锁机制 。对每个节点进行加锁,那么当更改表结构的时候,这时候就会树进行加锁,当表文件大的时候,这可以认为是不可实现的 。所以综上我们就必须进行分表与分库的操作 。
如何进行分库分表,目前互联网上有许多的版本,比较知名的一些方案:阿里的TDDL,DRDS和cobar,京东金融的sharding-jdbc;民间组织的MyCAT;360的Atlas;美团的zebra;其他比如网易,58,京东等公司都有自研的中间件 。
这么多的分库分表中间件方案归总起来,就两类:client模式和proxy模式 。

文章插图
client模式

文章插图
proxy模式无论是client模式,还是proxy模式 。几个核心的步骤是一样的:SQL解析,重写,路由,执行,结果归并 。个人比较倾向于采用client模式,它架构简单,性能损耗也比较小,运维成本低 。
如何对业务类型进行分库分表 。分库分表最重要的一步,即sharding column的选取,sharding column选择的好坏将直接决定整个分库分表方案最终是否成功 。而sharding column的选取跟业务强相关 。在我们的项目场景中,sharding column无疑最好的选择是业务编号 。通过业务编号,将客户不同的绑定签约业务保存到不同的表里面去,根据业务编号路由到相应的表中进行查询,达到进一步优化sql的目的 。
推荐阅读
- 13个网络监控工具
- 压缩袋如何使用 压缩袋只能使用一次吗
- 神话中的女神有哪些 上古神话女性人物
- 旱灾致安顺茶叶生产损失近千万元
- ?月子里浑身发冷怎么办
- 怎样洗脸可以去痘痘?
- 鸡蛋怎么去痘痘?
- mysql压力测试-sysbench安装及使用说明
- 常用的MySQL数据库管理工具有哪些
- 详解mysql数据库double write原理、性能影响及相关参数
