数据库的垂直拆分和水平拆分


数据库和数据库表的水平拆分和垂直拆分

数据库垂直拆分(按照功能模块拆分)

数据库水平拆分(根据某种规则划分,比如对id取余)

数据库表的垂直拆分

数据库表的水平拆分

数据拆分前其实是要首先做准备工作的,然后才是开始数据拆分

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

数据库拆分原则:就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面以达到分散单库(主机)负载的效果。

  • 第一步,首选垂直拆分
    一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面 。

    比如淘宝中期开始的数据库端按照业务垂直拆分:按照业务交易数据库、用户数据库、商品数据库、店铺数据库等进行拆分。

    采用垂直拆分优点:

    1. 拆分后业务清晰,拆分规则明确。
    2. 系统之间整合或扩展容易。
    3. 数据维护简单。

    缺点:

    1. 部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。
    2. 受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高。
    3. 事务处理复杂。
  • 第二步:其次才是水平拆分
    水平拆分的典型场景就是大家熟知的分库分表。
    垂直拆分后遇到单机瓶颈,可以使用水平拆分。

相对于垂直拆分的区别是:垂直拆分是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中。

相对于垂直拆分,水平拆分不是将表的数据做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中。

1.优先考虑缓存降低对数据库的读操作。

2.再考虑读写分离,降低数据库写操作。

3.最后开始数据拆分,切分模式: 首先垂直(纵向)拆分、再次水平拆分。

4.首先考虑按照业务垂直拆分。

5.再考虑水平拆分:先分库(设置数据路由规则,把数据分配到不同的库中)

6.最后再考虑分表,单表拆分到数据1000万以内。


文章作者: 迷雾总会解
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 迷雾总会解 !
评论