分库分表的方式

垂直切分

垂直分表

将某张表中的字段,按照某种业务特征划分,将不同业务特征的字段放入同一张表中,将该表拆分为若干张表,就是垂直分表

从某种层面来看,这就是数据库表设计层面上的逻辑拆分

垂直分库

将不同业务特征的表,按照业务特征进行划分,不同业务特征的表放入不同的数据库中

简单的来讲就是订单相关的表放入订单数据库,产品相关的表放入产品数据库中。

水平切分

水平切分是为了解决单表数据量过大的问题,将单表数据量过大的查询压力分散。

水平分表

将一张表中数据拆分为若干段,分别存入相同表结构的其他表中。这些表为数据的实际存储表,而这些表加起来为该表的逻辑主表。

水平分库

将一张表中数据拆分为若干段,分别存入不同数据库中的相同表结构的表中。

分库分表带来的问题

分库分表后,虽然从数据库数据容量或者是单表的数据库容量层面看,有了显著的下降,但是带来了数据操作的困难。

  1. 查询某一条数据,需要到每一个数据库中都检索,根据所有数据库的检索的综合结果来返回查询结果。
  2. 关联查询,可能关联查询的两张表不在同一个数据库,就产生了跨库查询,通过查询每个库中的数据之后,在代码中关联起来会很复杂,冗余,代码入侵太强了。
  3. 分页或者是排序,无法单独对数据在同一个库的同一张表中进行分页或者排序,需要查询所有库的数据,对综合起来的结果进行分页或者排序。
  4. 系统复杂度变高,运维难度增大。

解决方案:

  1. 通过spring中的AbstractRoutingDataSource,对多数据源进行操作,在代码层面解决跨库操作带来的问题。业务入侵大,代码量上升。
  2. 在持久层框架使用插件,对sql进行拦截,按照既定规则进行sql路由等行为。
  3. 驱动层进行代理,shardingJDBC
  4. 系统之外的代理层,单独部署,如Mycat,在应用层就可以把Mycat看作是一个多数据源的一个代理。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值