分库分表学习总结

分库分表想必目前好多中大型规模的互联网公司多多少少都会涉及到,所以笔者也是趁机学习一把并进行自我归纳总结;

首先需要搞清楚的是分库和分表是两种概念,分别是针对不同的场景衍生出来的技术,下面分别来阐述下分库和分表,已经所涉及到的场景;

1、分表

分表的概念即是将原来的一张表水平扩展,复制N张一模一样表结构的表。为何要分表呢?大家都知道当一张表中数据储存过多时,随之而来的问题是查询速度越来越慢,为了能够提供在数据库层面提高查询效率,我们会选择将一张大表拆分成多张规模较小的表,如图所示:

                         

分表之后,将原来的大数据量的表平摊到四个一模一样表结构的表中,这样能有效的提高查询效率;

2、分库

分库的概念即是将原来的一个库水平扩展,根据具体的业务需求,复制N个库。为何要分库呢?在面对高并发的情况下,单库最多能提供2000左右的并发,如果超过这个值的话,数据库压力很很大,但是现在尤其是电商领域,面对日益增多的用户量,尤其是在电商大促的时候,单台库更本满足不了现如今的需求,那这个时候只能水平扩展数据库,一个库能抗2000tps,那N个库的话,应该能扛2000*N吧,前提是其他瓶颈都已解决的情况下,所以说对于高并发的情况,分库能有效的缓解数据库压力。

3、如何进行分库分表

在分库分表的时候,一般我们会采用一定的规则,比如对于支付系统,我们可以采用支付订单编码ordreNo,或者用户账号userNo进行取模,比如我们要将之前系统的单库单标的模式更换为4库128张表,这个时候可以通过userNo%128,定义tb0 ~ tb127张表,然后使用userNo%4,计算这个账号应该落在哪个库里,userNo确定的时候,也就确定了对应的是哪张表哪个库了,然后可以通过数据库组件协助我们进行系统分库分表改造;

4、常用的分库分表组件

sharding-jdbc:

由当当网提供的开源组件,采用的客户端的形式,在使用它的时候需要引入相关的jar包,缺点是,每次版本更新的时候,对应的应用都需要跟着更新,优点的话,自行百度吧。

mycat:

基于cobar进行改造的,采用的是代理模式,应用基本上无感知,缺点,需要增加运维成本,得有专门的团队去维护这个mycat组件,优点的话,应用无感知,升级的时候只需要关注组件本身即可。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章