For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
分库分表是软件编程开发程序员在做数据库优化的时候会经常用到的一个方法,今天我们就通过案例分析来简单了解一下,分库分表的作用与优势分析。
什么是分库分表:
分表:将某一张表的数据拆分成若干份,分别放到结构相同的不同表中,然后,可以再同一个库里,也可以放到不同的库。
分表又叫水平分区,这种方式实现起来就比垂直分区复杂些,但是它能解决垂直分区所不能解决的问题,即单张表的访问及写入很频繁,这时候就可以根据一定的业务规则来分表,这样就能减轻单表压力,并且还能解决各个模块的之间的频繁交互问题。
分库:将原有的一个数据库拆分成多个数据库,每个数据库的结构相同。
分库又叫垂直分区,这种方式实现起来比较简单,重要的是对业务要细化,分库时候要想清楚各个模块业务之间的交互情况,避免将来写程序时出现过多的跨库操作。
为什么要分库分表:
随着企业的发展,库中的表会越来越多,同时每张表的数据也会越来越大。这样做相同的操作:表连接,增删改查所耗费的性能也越来越大。与此同时,数据库访问者越来越多时,一台服务器的的负载也会越来越大,因为cpu内存io都是一定的,这样终的结果就是系统会越来越卡,直至各种超时。
而当我们采用分布式系统,负载均衡的分散数据,就可以很好的解决这个问题。
分表
当然,先要知道什么情况下,才需要分表。个人觉得单表记录条数达到百万到千万级别时就要使用分表了。
1,分表的分类
1>纵向分表
将本来可以在同一个表的内容,人为划分为多个表。(所谓的本来,是指按照关系型数据库的三范式要求,是应该在同一个表的。)
分表理由:根据数据的活跃度进行分离,(因为不同活跃的数据,处理方式是不同的)
这样纵向分表之后:
先存储引擎的使用不同,冷数据使用MyIsam(mysql中的技术)可以有更好的查询数据。活跃数据,可以使用Innodb,可以有更好的更新速度。
其次,对冷数据进行更多的从库配置,因为更多的操作是查询,这样来加快查询速度。对热数据,可以相对有更多的主库的横向分表处理。
其实,对于一些特殊的活跃数据,也可以考虑使用memcache,redis之类的缓存,等累计到一定量再去更新数据库。或者mongodb一类的nosql数据库,这里只是举例,就先不说这个。
2>横向分表
字面意思,就可以看出来,是把大的表结构,横向切割为同样结构的不同表,如,用户信息表,user_1,user_2等。表结构是完全一样,但是,根据某些特定的规则来划分的表,如根据用户ID来取模划分。
分表理由:根据数据量的规模来划分,保证单表的容量不会太大,从而来保证单表的查询等处理能力。(并且如果可以很好的定位到数据在哪张分表时,使用表连接查询的话效率和速度都会更好)
案例:同上面的例子,博客系统。当博客的量达到很大时候,就应该采取横向分割来降低每个单表的压力,来提升性能。例如博客的冷数据表,假如分为100个表,当同时有100万个用户在浏览时,如果是单表的话,会进行100万次请求,而现在分表后,就可能是每个表进行1万个数据的请求(因为,不可能绝对的平均,只是假设),这样压力就降低了很多很多。
数据库的复制能解决访问问题(简单的负载均衡,不考虑数据分摊,数据都是一致的),并不能解决大规模的并发写入问题,要解决这个问题就要考虑mysql数据切分了
数据切分,顾名思义,就是数据分散,将一台主机上的数据分摊到多台,减轻单台主机的负载压力,有两种切分方式,一种是分库,即按照业务模块分多个库,每个库中的表不一样(按照模块划分表然后区分到不同的库),还有一种就是分表,按照一定的业务规则或者逻辑将数据拆分到不同的主机上,每个主机上的表是一样的,这个有点类似于Oracle的表分区(按照业务逻辑将数据拆分,然后保存到不同的数据库中,比如前边讲到的活跃数据)。
分库的优点是:实现简单,库与库之间界限分明,便于维护,缺点是不利于频繁跨库操作,单表数据量大的问题解决不了。
分表的优点是:能解决分库的不足点,但是缺点却恰恰是分库的优点,分表实现起来比较复杂,特别是分表规则的划分,程序的编写,以及后期的数据库拆分移植维护。
实际应用中,一般互联网企业的路线都是先分库再分表,两者结合使用,取长补短,这样发挥了mysql扩展的大优势,但是缺点是架构很大,很复杂,应用程序的编写也比较复杂。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。