新闻动态 > 新闻 

MySQL数据库为什么要进行分库分表

2021年07月16日

原标题:MySQL数据库为什么要进行分库分表
MySQL数据库为什么要进行分库分表
1、首先我们要了解什么是分库分表?
简单理解,就是把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。
2、为什么要分表?
当一张表的数据达到几千万时,查询一次所花的时间就会变多,如果有联合查询的话,那更是麻烦。分表的目的就在于此,减小数据库的负担,缩短查询时间。
MySQL中有一种机制是表锁定和行锁定,是为了保证数据的完整性。表锁定表示别人都不能对这张表进行操作,必须由本人对表操作完才行。行锁定也一样,别的SQL必须由本人对这条数据操作完了,才能对这条数据进行操作。
当然,首先要知道什么情况下,才需要分表。小编觉得单表记录条数达到百万到千万级别时就要使用分表了。 
分表的分类有:
1>纵向分表
将本来可以在同一个表的内容,人为划分为多个表。
分表理由:因为不同活跃的数据,根据数据的活跃度进行分离。
纵向分表后的好处:
首先存储引擎的使用不同,冷数据使用MyIsam 可以有更好的查询数据。活跃数据,可以使用Innodb ,可以有更好的更新速度。 其次,对冷数据进行更多的从库配置,因为更多的操作时查询,这样来加快查询速度。对热数据,可以相对有更多的主库的横向分表处理。
2>横向分表
字面意思,就可以看出来,是把大的表结构,横向切割为同样结构的不同表,如,用户信息表,user_1,user_2 等。表结构是完全一样,但是,根据某些特定的规则来划分的表,如根据用户ID来取模划分。
分表理由:根据数据量的规模来划分,保证单表的容量不会太大,从而来保证单表的查询等处理能力。
分库的优点是:实现简单,库与库之间界限分明,便于维护,缺点是不利于频繁跨库操作,单表数据量大的问题解决不了。
分表的优点是:能解决分库的不足点,但是缺点却恰恰是分库的优点,分表实现起来比较复杂,特别是分表规则的划分,程序的编写,以及后期的数据库拆分移植维护。
分库又叫垂直分区,这种方式实现起来比较简单,重要的是对业务要细化,分库时候要想清楚各个模块业务之间的交互情况,避免将来写程序时出现过多的跨库操作。
分表又叫水平分区,这种方式实现起来就比垂直分区复杂些,但是它能解决垂直分区所不能解决的问题,即单张表的访问及写入很频繁,这时候就可以根据一定的业务规则(PS:如互联网BBS论坛的会员等级概念:根据会员等级来分表)来分表,这样就能减轻单表压力,并且还能解决各个模块的之间的频繁交互问题。
在现实生活中,一般互联网企业的路线都是先分库再分表,两者结合使用,取长补短,这样发挥了mysql扩展的最大优势,但是缺点是架构很大,很复杂,应用程序的编写也比较复杂。以上是mysql的数据切分的一些概念,数据切完了,现在要做的是怎么样再整合起来以便于外界访问,因为程序访问的入口永远只有一个,现在比较常用的解决方案是通过中间代理层来统一管控所有数据源。