简介
多从业数据库维护人员,或者程序员,架构师去面试的时候,经常被问,什么时候数据库垂直拆分,水平拆分。为什么你的数据库需要做垂直拆分和水平拆分,如果你连垂直拆分和水平拆分都分不清的话,为什么拆分就更不知道了。
当初我在学习数据库垂直拆分和水平拆分,就被这两个概念折磨的不行,为什么折磨我呢,因为当时看明白了,也记下来了,但是过段时间还是分不清,那有没有学习一遍,以后想忘记都难的办法呢。答案是有的,下面我介绍垂直拆分和水平拆分的方法,你们学完想忘记都难。
在学习之前,先看一张长白山地区垂直分布植物带
从图中,可以很直观的看到,在海拔300到2690米的区间,分布了大约5个植物带,分别为温带落叶阔叶林,寒温带针阔混交林,亚寒带针叶林,岳桦林,苔原带。我们可以把这些植物带看成在数据库里的一个个的业务线表,因为在业务发展初期,程序员为图省事,会将所有业务线的表都集中在一个数据库中,这个数据库中会存放业务订单表,订单交易表,用户基础信息表,支付路由表等等,当业务高速发展之后,单个数据库的存储容量和性能已经无法支撑业务了,于是就需要进行拆分,大家想想这个时候会怎么拆分呢?
垂直拆分
对的,没错,会开始根据业务属性不一样,对这些表进行拆分,在上图中,长白山的植物因为生活习性不一样自然分布在不同的海拔,天然的进行了垂直分布。在数据库里将表按照不同的业务属性,拆分到不同库中,就是垂直拆分,到这里大家明白了吧,数据库做拆分的时候,第一步做的就是垂直拆分,这次拆分,应用改动最少,获得性能提升却很大。
水平拆分
当你的订单表单独建库之后,业务再次迅猛发展了,单表的容量和性能也无法支撑你的业务,就需要进行水平拆分。你想一下,长白山海拔300米的温带落叶阔叶林的植物,如果要繁殖,能去海拔2000米吗,当然不行,因为温度,水分都不适合,它只能去别的海拔300米别的高山去繁殖,这就叫水平发展。同样的道理,订单容量太大,性能太差,就需要做水平拆分,常用的拆分方式就是分库分表,例如将1亿订单表拆分成100张表,那每张表的数据就只有100W,查询性能就不会差了。
如果今后大家忘记了什么是垂直拆分和水平拆分,只要想想长白山的植物带分布就能回忆起数据库的拆分原理。




