目录
一:Mysql的分库分表
对于Mysql进行分库分表我们需要明白以下几点,整个学习过程都是基于以下:
(1)为什么要进行分库分表
(2)分库分表的原则
(3)分库分表产生额外的技术难点
二:为什么要进行分库分表
我们来讨论分库分表的原因就是为什么要进行分库分表?什么样的场景下要分库分表?
首先要说明,分库分表实在数据库层面产生了瓶颈。简而言之,数据库的分库分表一定是在应用程序的合理架构下,才需要考虑这样的技术实现。在生产中,一定是先应用层次解决瓶颈然后在对数据库层面优化,也就是说,在应用层面,如果项目还是个单体或者垂直应用,我们强烈建议先对项目进行结构优化(比如集群或者Soa或者微服务化)。
其次,我们在什么样的场景下实现数据库的分库分表?基于数据库的存储型性能这里仅对Mysql做讨论,毕竟Mysql是大多数公司使用的,在Mysql的官方文档上说明过 500W数据量是Mysql承载的极限,超过500W性能会大幅度降低。但是在实际生成中我们曾经测试过200W数据量是Mysql的性能转折点。因此在数据量超过200w我们建议分库分表。
最后,也是可能比较使用的一点,更具实际上产场景分库分表。这种情况这里制作一个简单的说明,因为这种是基于公司实际的胜场业务来实现的。我们这里在后面会做一个简单的讨论。
三:分库分表的原则
1.分库分表的结构视图,这里列出几种数据依赖结构来说明。
(1)完全不相干的表(这种表依赖基本不存在的,即使是不相关的模块)
(2)包含关系的表(表B完全包含A的,这里使用也不符哦)
(3)交际关系的表
2.分库分表的类型
数据库分库分表分为2中分割原则:水平分割和垂直分割
垂直分割:又称结构分割,通常是模块表之间分割
水平分割:又称业务分割,通常将一个表数据按照一定的规则分割到不同的表中
3.垂直分割(分库/分表)
可以这么说,很多公司在进行组建分割原则时,垂直分割一定是优先于水平分割,也就说分割时优先考虑先进性垂直分割。
垂直分割又称结构分割,这是我们之前公司的叫法,是指将业务模块关联最小的表之间进行分割。比如一个后管系统最后可以拆分成CMS