Mysql分库分表

目录

一、分库分表定义

二、分库分表场景

     2.1 分库分表时机

     2.2 为什么需要分库分表

三、分库分表方式

垂直分片

水平分片

四、分库分表带来的问题

五、常见分库分表组件优缺点

一、分库分表定义

       分库:将一个独立的数据库拆分成多个数据库,比如单库按业务拆分成订单、资金、合同库

       分表:大数据量表拆分成多个数据表

二、分库分表场景

     2.1 分库分表时机

             微服务:基于业务,需要分拆

             读写分离:写主库,读从库

             建索引,优化查询,性能无法提升

     2.2     为什么需要分库分表

           分库:

               磁盘存储:业务量剧增,单机磁盘容量不足,多个数据库,分摊磁盘容量

               并发连接支持:高并发场景,多个库分担连接压力(MySQL默认100,最大16384)

          分表:

                数据量比较多,单表超过500w ,查询sql变慢,索引优化无效果

三、分库分表方式

垂直分片

     核心理念是专库专用

    拆分前:一个数据库由多个数据表构成,每个表对应着不同的业务

    拆分后:按业务将表进行归类,分布到不同的数据库中,从而将压力分散至不同的数据库

将用户表和订单表垂直分片到不同的数据库

水平分片

     不再将数据根据业务逻辑分类,而是通过某个字段(或某几个字段),根据某种规则将数据分散至多个库或表中,每个分片仅包含数据的一部分

常用主键分片策略:

     取余\取模、范围分片、时间、枚举值分片(比如按地区)、自定义业务规则

四、分库分表带来的问题

 1、事务一致性问题:原本单库保证数据一致,分库分表后,不同库不同机器,带来分布式事务问 

                                --分布式事务Spring Cloud Seata

 2、跨节点关联查询问题:  表分到不同库,无法关联查询     

                               --字段冗余:违反mysql范式,多存放字段

                                  生成宽表、ES存储等,汇集数据 

                                  单表查,组装数据                       

 3、跨节点分页、排序函数 :limit、order by 排序等问题,需要汇总所有分片结果来分页、排序

                                 --代码中处理或者生成新表ES等大数据中间件查询

  4、主键重复:单库主键自增无用,需要设计全局分布式唯一主键

                            --uuid 

                              mysql单调递增

                              redis自增

                              雪花算法

                              美团leaf   

ShardingSphere的SQL使用限制使用限制

五、常见分库分表组件优缺点

Proxy代理层分片 :

1、altas 长时间无维护

优点:

    1、DB动上下线

     2、支持ip过滤,简单权限控制

     3、记录所有sql,实现简单审计功能

 缺点:

     1、不支持跨库分表

      2、性能消耗

      3、不支持配置参数动态修改

2、mycat:

     优点:多语言使用,不用调整代码

     缺点: 多一层转发,效率低

                 目前社区不活跃  

3、shardingshpere:

     优点:服务中集成,效率好

     缺点:

          1、需要引入jar包,代码修改

          2、仅支持java语言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值