Mysql分库分表类问题

一、为什么要分库分表(设计高并发系统的时候,数据库该如何设计)

在高并发的情况下会有3个问题:
1.单机Mysql并发扛不住
2.Mysql磁盘快满了
3.Mysql单标数据量太大了,Sql慢

二、用过哪些分库分表中间件

cobar、TDDL、atlas、sharding-jdbc、mycat

三、不同的分库分表中间件有什么优缺点

数据库中间件分为两类:proxy和client端的

  • cobar:阿里b2b团队开发,现在不怎么维护了 proxy
  • TDDL: 淘宝团队开发的,现在不怎么用 client
  • atlas:360团队在用的,基本不怎么更新了,好一点
  • sharding-jdbc: client层的解决方案,比较活跃,优点就是比较轻量级,缺点耦合度太高
  • mycat:proxy层解决方案,比较活跃,优点是设计模式比较好,对用户透明,缺点维护成本大

    四、如何对数据库进行垂直和水平拆分的

  • 垂直:列的拆分
  • 水平:数据的拆分

分库主要是承载并发
分表主要是分散数据量

一般都是指水平拆分
水平拆分

水平拆分的算法选择两种方式:
1.id Hash算法 好处就是可以平均请求压力,缺点是扩容比较麻烦
2.时间range分,缺点就是大部分请求都是看最新的数据

五、单表如何动态切换到分库分表上

两种方案:
1.停机分库分表

  • 单独的job进行数据分发
  • 更改程序配置,更换数据源到新的中间件上

2.不停机双写方案
方案

方案

其实就是通过后台的导数程序现把数据备份完成,然后在对比数据,当数据完全一致后即切换完成。

六、如何设计可以动态扩缩容的分库分表方案

步骤:
1.选择中间件
2.设计方案,多少库,多少表
3.基于中间件测试能否正常读写
4.完成单库到分库分表的迁移,双写方案
5.完成

再次扩容方案:
1.停机扩容
2.优化后的方案
预先创建好够用的库和表。
32库和32表取模路由规则

扩容方式介绍

步骤:
步骤

七、分库分表之后,id主键如何处理

1.数据库自增ID

适合数据量大,但是并发不高

2.uuid

缺点就是太长了,不适合做主键
优点就是简单

3.获取系统当前时间

时间戳和业务字段结合使用

4.snowflake算法

结构

解释

实现步骤


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 18846433665@163.com

文章标题:Mysql分库分表类问题

文章字数:631

本文作者:Xu Shengcai

发布时间:2019-10-29, 22:05:19

最后更新:2019-10-30, 00:43:29

原始链接:http://yoursite.com/2019/10/29/Mysql分库分表类问题/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏