关于数据可水平拆分和垂直拆分的学习记录
前言
理解数据库水平拆分、垂直拆分。学习记录。
水平拆分
因为数据量非常大,所以针对数据量进行的分层,称为水平拆分。
例:一个订单表有100亿条数据,如果查询一条数据,得从这100亿里面查找,会非常慢,如果将这一张表分成100份,每张表有1亿条,就小了很多,比如order0,order1,order1...order99表 。
查询订单时候订单orderid=123456789,可以将orderid%100,得到0-99的数,这里得到89,然后就是查的是表名为order89的数据。这样查询的时间会大大缩短。
水平层面的拆分,就是行的拆分。即分层拆分。
垂直拆分
数据量不是特别大,但是存在着某些字段很长,所以表占用的空间很大,检索的表的时候需要执行大量的IO,导致性能降低。需要将大的字段拆分到另外的表里,与原表形成一一对应的关系,这就是垂直拆分。
例如文章表article:有如下字段:
Id writerName 点赞数 文章内容 浏览数 评论
其中文章内容
和评论
是比较大的字段,其他的字段都比较小。
如果我们只想查询id为2的文章的点赞数
时候:
select 点赞数 from tt where id = 2
虽然只是查询点赞数
,但是文章内容
和评论
这两个大字段也是要被扫描的,很消耗性能。这就可以使用垂直分割。我们可以把文章内容
单独放到一张表中,通过id与article表建立一对一的关系,同样将评论
单独放到一张表中。这样我们查询article中的点赞数
的时候就不会扫描文章内容
和评论
了。
优缺点
解决的问题(优点) | 不能解决的问题(缺点) | |
---|---|---|
水平拆分 | 单表中数据量增长出现的压力 | 表与表之间的io争夺 |
垂直拆分 | 表与表之间的io竞争 | 单表中数据量增长出现的压力 |
原博:https://www.cnblogs.com/sns007/p/5790838.html
参考:https://www.cnblogs.com/selinamee/p/6873969.html
拆分的本质
无论是水平拆分还是垂直拆分,本质上是为了解决“读”的瓶颈问题。
参考:
https://baijiahao.baidu.com/s?id=1614304400276051465&wfr=spider&for=pc