关于数据可水平拆分和垂直拆分的学习记录

前言

理解数据库水平拆分、垂直拆分。学习记录。

水平拆分

因为数据量非常大,所以针对数据量进行的分层,称为水平拆分。

例:一个订单表有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

posted @ 2022-03-24 16:24  吾王彦  阅读(121)  评论(0编辑  收藏  举报