首页
运维教程
Linux基础
系统服务
系统架构
数据库
shell脚本
虚拟化
大数据
DevOps
企业案例
运维开发
python
go语言
运维安全
行业资讯
网络基础
系统安全
运维面试
学习路线
学习方法
面试题库
职场解惑
软件
运维软件
办公软件
书籍资源
技术陪跑营
重要信息
首页 运维教程数据库分库分表讨论

分库分表讨论

你为什么会决定进行分库分表,分库分表过程中遇到什么难题,如何解决的

a. 为什么决定进行分库分表
1. 根据业务类型,和业务容量的评估,来选择和判断是否使用分库分表。
2. 当前数据库本事具有的能力,压力的评估。
3. 数据库的物理隔离,例如减少锁的争用、资源的消耗和隔离等。
4. 热点表较多,并且数据量大,可能会导致锁争抢,性能下降。
5. 数据库的高并发,数据库的读写压力过大,可能会导致数据库或系统宕机。
6. 数据库(MySQL5.7以下)连接数过高,会增加系统压力。
7. 单表数据量大,如SQL使用不当,会导致io随机读写比例高。查询慢(大表上的B+树太大,扫描太慢,甚至可能需要4层B+树)
8. 备份和恢复时间比较长。

b. 遇到什么问题
1. 全局pk(主键和唯一索引)的冲突检测不准确,全局的自增主键支持不够好。
2. 分片键的选择。如没有选择好,可能会影响SQL执行效率。
3. 分布式事物,中间价产品对分布式事物的支持力度。
4. 对于开发来说,需要进行业务的拆分
5. 对于开发来说,部分SQL不兼容则需要代码重构,工作量的评估
6. 对于开发来说,跨库join,跨库查询

c. 如何解决
1. 使用全局分号器。或者使用全局唯一id,(应用生成顺序唯一int类型做为全局主键)。
2. 应用层来判断唯一索引。
3. 配合应用选择合适的分片键,并加上索引。
4. 配合应用,配合开发,对不兼容SQL的进行整改。

本文链接:http://www.geekyunwei.com/1204.html

网友评论comments

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

暂无评论

Copyright © 2021 极客运维 公众号《极客运维之家》
扫二维码
扫二维码
返回顶部