数据库和数据表的垂直拆分和水平拆分
前言
有些人认为数据库拆分或者数据库表拆分是数据库大,或者数据多而形成的,这是不完全的,也可能是当时设计和预想的不一样,比如说当时设计一个功能的时候把这个功能放在主库中,认为是一个亮点,后来这个功能居然是滑铁卢,然后就丢去了分库中。
实际上,数据库拆分是数据库优化最显著的一种方式,针对于数据库设计缺陷上,甚至随着时间的推移,发现拆分成了必要。
正文
数据库垂直拆分
数据库水平拆分
数据库的垂直拆分
最简单就是将常用字段放在一个表,不常用字段放在另外一个表中。
数据库水平拆分
针对这个数据库水平拆分有两种,关于这个id的问题,有些人设计是随机生成的作为id,那么用hash可作为分表的标准。
有些是id 是自动增长的,那么这种处理方法就需要另外建立一张表自动增长来处理这个问题。
什么时候采用分库分表?
采用分库分表是比较危险的情况。
那么先采用一些放肆来缓解。
1.采用redis、memcached 来进行缓存,降低数据库的读操作。
2.如果缓存不行的啊,那么可以采用读写分离。
3.读写分离压力还大的话,使用分库分表。
那么问题来了,在先垂直拆分还是先水平拆分。
如果从风险的角度来说其实水平拆分的风险最小,垂直拆分的风险最大。
那么为什么会先垂直拆分呢?因为是垂直拆分的话,是使得数据库更加合理,如果一开始使用水平拆分,那么后面会增加垂直拆分的复杂度,然后就是水平拆分增加成本。
那么是先分库还是先分表呢?先分库,因为分表是一个巨大的工程,且风险极高。