你为什么会决定进行分库分表,分库分表过程中遇到什么难题,如何解决的?
你为什么会决定进行分库分表,分库分表过程中遇到什么难题,如何解决的? 一、为什么决定进行分库分表? 1、根据业务类型,和业务容量的评估,来选择和判断是否使用分库分表。 2、当前数据库本事具有的能力,压力的评估。 3、数据库的物理隔离,例如减少锁的争用、资源的消耗和隔离等。 4、热点表较多,并且数据量大,可能会导致锁争抢,性能下降。 5、数据库的高并发,数据库的读写压力过大,可能会导致数据库或系统宕机。 6、数据库(MySQL5.7以下)连接数过高,会增加系统压力。 7、单表数据量大,如SQL使用不当,会导致io随机读写比例高。查询慢(大表上的B+树太大,扫描太慢,甚至可能需要4层B+树)。 8、备份和恢复时间比较长。 二、都遇到什么问题? 1、全局pk(主键和唯一索引)的冲突检测不准确,全局的自增主键支持不够好。 2、分片键的选择。如没有选择好,可能会影响SQL执行效率。 3、分布式事务,中间价产品对分布式事务的支持力度。 4、对于开发来说,需要进行业务的拆分。 5、对于开发来说,部分SQL不兼容则需要代码重构,工作量的评估。 6、对于开发来说,跨库join,跨库查询。 三、如何解决? 1、使用全局分号器。或者使用全局唯一id,(应用生成顺序唯一int类型做为全局主键)。 2、应用层来判断唯一索引。 3、配合应用选择合适的分片键,并加上索引。 4、配合应用,配合开发,对不兼容SQL的进行整改。
分类:
DBA
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!