一文读懂数据库/数据库表的水平垂直拆分


前言

为什么要做数据库或者数据库表的拆分呢?

随着企业发展越来越好了,业务越来越大了,做了读写分离数据库压力还是越来越大,这时候怎么办呢,一台数据库扛不住,那我们就分几台吧,做分库分表,对表做垂直拆分,对库做水平拆分等。


一、数据库拆分

   数据拆分前其实是要首先做准备工作的,然后才是开始数据拆分:
   第一步:采用分布式缓存redis、memcached等降低对数据库的读操作。
   第二步:如果缓存使用过后,数据库访问量还是非常大,可以考虑数据库读、写分离原则。
   第三步:当我们使用读写分离、缓存后,数据库的压力还是很大的时候,这就需要使用到数据库拆分了。

1.1 数据拆分原则

   数据库拆分原则:就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面以达到分散单库(主机)负载的效果。
(1)首选垂直拆分
   一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面 。
   比如淘宝中期开始的数据库端按照业务垂直拆分:按照业务交易数据库、用户数据库、商品数据库、店铺数据库等进行拆分。

采用垂直拆分优点:
   拆分后业务清晰,拆分规则明确。
   系统之间整合或扩展容易。
   数据维护简单。
缺点:
   部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。
   受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高。
   事务处理复杂。
(2)其次才是水平拆分
   水平拆分的典型场景就是大家熟知的分库分表。
   垂直拆分后遇到单机瓶颈,可以使用水平拆分。

   垂直拆分是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中。

1.1 垂直拆分(按照功能模块拆分)

   数据库垂直拆分主要为了解决某个数据库访问压力过大,造成性能瓶颈,需要将库按照不同的功能进行拆分成几个库,分担一个库的访问压力;
在这里插入图片描述

1.2 水平拆分(按照某种规则拆分)

   相对于垂直拆分,水平拆分不是将表的数据做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中。
   例如按照id的奇数偶数原则将数据库拆为两个数据库,一个是奇数id的库,一个是偶数id的库;
在这里插入图片描述

二、数据库表拆分

2.1 垂直拆分

   将表中不常用的字段或者占用空间大的字段单独拿出来成为一个表;、
在这里插入图片描述

2.2 水平拆分

   主要用于解决单表数据量过大的问题;在拆表时,表的字段与原表一致,但是要去掉表的自动增长功能,即还需要单独建立一个在插入的时候提供自动增长的id号;
在这里插入图片描述
   注意:数据库/表的拆分是迫不得已才要进行,也就是说如果其他手段都无法解决数据库的性能瓶颈问题的时候,才要考虑拆库拆表

  1. 优先考虑缓存降低对数据库的读操作。
  2. 再考虑读写分离,降低数据库写操作。
  3. 最后开始数据拆分,切分模式: 首先垂直(纵向)拆分、再次水平拆分。
  4. 首先考虑按照业务垂直拆分。
  5. 再考虑水平拆分:先分库(设置数据路由规则,把数据分配到不同的库中)
  6. 最后再考虑分表,单表拆分到数据1000万以内。

总结

   参考文献:https://blog.csdn.net/qq_43371004/article/details/104899069
   如果文中有笔误希望大家指出,我会及时改正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值