浅谈读写分离分库分表之如何选择垂直切分和水平切分

垂直切分:
1.垂直切分的特点
  1.1 按照业务拆分不同业务切分成不同的库,例如订单库,用户库,商品库。
  1.2 这种切分方式会出现问题,无法join,因为会出现跨库的情况,严重降低系统性能。
 2.垂直切分的优点:
  2.1垂直切分之后业务清晰,拆分的规则很明确。即不同的业务系统对应不同的数据库。
  2.2系统之间的扩展性更好,耦合度相对较低,更易于整合。
  2.3数据维护简单。
 3.垂直切分的缺点
  3.1部分业务表无法使用join关联查询,只能通过接口调用的方式,提升系统的复杂度。
  3.2跨库事务很难处理。例如生产订单,扣减库存,一旦其中一个失败都要整体回滚。(需要使用分布式事务来解决)
  3.3垂直切分后,面对高并发场景,依旧会出现单体性能瓶颈的问题。


水平切分:
1.水平切分的特点
 1.1 将一张表的数据按照某种规则分到不同的数据库中。
 1.2 需要指定一个分片规则。
 1.3 使用分片字段查询时,可以确定查询的实体库是哪一个,其他的字段查询所有表。
2.水平切分优点。
 2.1解决了单体数据库的性能问题。
 2.2拆分规则封装好,对应用端几乎透明,开发人员几乎无需关心拆分细节。
 2.3提升了系统稳定性和负载能力,相当于把整体系统的负载压力用多个库承载。
3.水平切分的缺点
 3.1拆分规则难抽象,同一套业务数据不同的查询规则很有可能出现冲突。例如用户表拆分,用户查询和商户查询就很难划分,商户此时查询订单时,需要从分散的多个库才能查到所有订单。
 3.2事务一致性很难解决。(分布式事务,一般基于MQ实现分布式事务)
 3.3二次扩展时,数据迁移难度很大,维护难度成本高。

猜你喜欢

转载自blog.csdn.net/weixin_38305866/article/details/109308717