分库分表
2023-11-29 13:49:34
amethystfob
分库分表
一、为什么要分库分表?
分库分表方案更多的是对关系型数据库数据存储和访问机制的一种补充,而不是颠覆。
二、分库分表的手段有那些?
三、JDBC和proxy方案优缺点是什么?
四、什么是垂直拆分和水平拆分?
垂直分表:eg:把userid和password拆分出来,单纯做登录。
优点:
1、差分后业务清晰(专库专用按业务拆分)
2、数据维护简单、按业务不同业务放到不同机器上
缺点:
1、如果单表的数据量大,写读压力大
2、受某种业务来决定、或者被限制。也就是说一个业务往往会影响到数据库的瓶颈(性能问题)。
3、部分业务无法关联join、只能通过Java程序接口去调用,提高了开发复杂度。(商品、订单信息、会员信息)
水平分表:
优点:
1、单(库)表的数据保持在一定的量(减少),有助于性能的提高
2、提高了系统的稳定性和负载能力
3、拆分的表的结构相同、程序改造较少
缺点:
1、数据的扩容很有难度维护量大
解释:如果再进行第一次分库(2个),可以按13579、02468进行差分,那么再要进行第二次分库呢?(3个)可以1357、0246、89,那么再进行第三四次扩容呢?或者不是以数字进行分库,那么难度与拆分规则就变的很难了。。。
2、拆分规则很难抽象出来
3、分片事务的一致性的问题,部分业务无法关联join、只能通过Java接口去调用。
淘宝京东统计数据:异构方式 。查查。
五、分库分表会面临那些技术问题?
1、分布式事务问题 acid(一个库)
2、跨库join查询
3、分布式全局唯一id
六、生产环境分库分表技术如何选型?
开源框架:
分库分表方案:
1、基于JDBC(直连层):进程内
shardingsphere、tdd部分开源(淘宝的)
2、基于代理(代理层):跨进程
mycat、mysql-proxy(atlas 360)
优点:
1、跨语言、跨平台
七、如何不停机迁移分库分表
不停机双写迁移