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.优化后的方案
预先创建好够用的库和表。
步骤:
七、分库分表之后,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" 转载请保留原文链接及作者。