问答详情
源自:4-5 数据库表的垂直和水平拆分

数据库拆分表

能不能讲个具体怎么个横向和纵向拆分!

提问者:慕丝8184120 2018-02-01 16:51

个回答

  • wangjhLbry
    2018-02-03 18:59:29

    数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分;另外一种则是根据表中的数据的逻辑关系,将同一个表中的

    数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数据的水平(横向)切分。

    垂直切分

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

    垂直切分的优缺点介绍:

    优点:

    拆分后业务清晰,拆分规则明确。

    系统之间整合或扩展容易。

    数据维护简单。

    缺点:

    部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。

    受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高。

    事务处理复杂。

    由于垂直切分是按照业务的分类将表分散到不同的库,所以有些业务表会过于庞大,存在单库读写与存储瓶颈,所以就需要水平

    拆分来做解决。

    水平切分

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

    分到其他的数据库中,如下图:

    水平切分的优缺点介绍:

    拆分规则抽象好,join操作基本可以数据库做。

    不存在单库大数据,高并发的性能瓶颈。

    应用端改造较少。

    提高了系统的稳定性跟负载能力。

    拆分规则难以抽象。

    分片事务一致性难以解决。

    数据多次扩展难度跟维护量极大。

    跨库join性能较差。

    垂直切分和水平切分共同的特点和缺点有:

    引入分布式事务的问题。

    跨节点Join的问题。

    跨节点合并排序分页问题。

    多数据源管理问题。