天天看点

分表分库:水平分割VS垂直分割

For Example(分表):

登录系统的user表不同场景分割。

(分表详述)1、登录系统的user表水平分割:假设登录用户数据累计数百亿,若只有一张表,每次用户登录发起请求的时候都要从数百亿数据中select,select速度会非常慢。现可将一张表的模式拆分成100份,每张表数据量则降到数(个位数)亿级,当用户登录的时候,可以将获取到的用户id取余(id%100),执行DB操作select的时候将取模的数跟拆分的表名连接起来,构成新的表名,这时select的time会大幅度缩短。

(分表详述)2、登录系统的user表垂直分割:假设用户表记录并不多,若用户通过问题与答案的方式找回密码,若果问题与答案字段未加以长度限制,根据不同的用户习惯,表中问题与答案字段会很长,表占用空间很大,检索表的时候需要执行大量的IO,性能严重降低。现可将大的字段拆分到另一表中,并且该表与原表是一对一的关系,这时当select不与问题跟答案相关的字段,就不会扫描问题与答案属性了。

For Example(分库):

在线商城购物系统现有如下:product产品表(数据量数十万级,稳定),user用户表(数据量百万级,且有增长趋势),订单表(数据量数百万级(200,300...),且有增长趋势)。

(分库简述)1、水平拆分解决单表中数据量增长出现的压力,不解决表与表之间的IO竞争。

First:user表以性别拆分为man user表和women user表。

Second:product表未完成订单放一个server上,已完成订单表跟man user表放一个server上,women user表放一个server上。

Third:订单表以是否完成拆分为完成订单和未完成订单。

(分库简述)2、垂直拆分解决表与表之间的IO竞争,不解决单表中数据量增长出现的压力。

First:将product表与user表放置到同一个server上。

Second:将订单表独立放置到一个server上。