数据库分库分表

原创
2020/11/01 15:07
阅读数 174

分库分表

使用场景:mysql单表1500万以上需要分表 当数据库容量达到实例的三分之二需要分库

水平分表

同一个库中,单表数据量过大,影响查询效率时,创建多个表,表结构和类型不变,如订单表order_1 order_2,可以使用商品id%num+1(num是表的拆分数量)

水平分库

创建多个库,库里面的表数量和类型不变,在单个库容量超过实例的三分之二后考虑,可以使用商家id%num+1算法或者年份%num+1(num是库的拆分数量)

垂直分表

同一个库中,单表热数据和冷数据拆分多个表分别存储,独立维护,如微博信息表中内容和回复/点赞分开存储

垂直分库

每个库单独存储部分表,如订单表,库存表,商品表放入不同的库

分库分表带来的问题

  • id重复,可以用snowflake算法解决
  • 分布式事务带来的数据一致性问题
  • 多表关联查询,影响性能

Sharding-sphere实现分库分表

sharding-sphere整体设计是jdbc的增强,通过sql解析和sql转换,交给jdbc执行最终的sql语句

sharding-sphere需要提前设计好水平分库分表的规则和字段,在不更改sql的情况下,完成数据的更新和查询

在3.0之前处理部分表进行分库分表,部分不分库分表的方法是把分库分表相关业务放到单独的service模块,最新的sharding-sphere解决了该问题

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部