之前在面试的时候有老师问:
我看你使用了水平分表,但是如果有些 1%的数据占了访问量的 90%,而剩下 99%的数据只占了访问量的 10%。这种情况怎么处理。
1 、冷热分离
1.1、什么是冷热分离
冷热分离指的是在处理数据时将数据库分为冷库和热库,冷库指用于存放走到了终态的数据(冷数据)的数据库,热库用于存放还需要修改的数据(热数据)的数据库。
1.2、什么情况下使用冷热分离?
从冷热分离的定义我们可以知道当业务需求涉及到冷热数据,表数据量增长速度快或数据量较大时,我们就该考虑是否使用冷热分离解决方案了。比如:
1)数据走到终态后,只有读没有写的需求。
2)用户能够接受新旧数据分开实现业务,比如查询新旧数据的时候分开操作。
1.3、如何判断一个数据到底是冷数据还是热数据?
一个数据是冷数据还是热数据,需要根据实际的业务需求来制定判定条件。满足热数据条件的归为热数据,满足冷数据条件的归为冷数据。
判定条件可以是表里的 1 个字段或多个字段组合的方式组成。
时间、状态等都是比较适合用作判定条件的字段。
比如,我们管理一个订单系统,针对订单主表,我们可以使用下面两种方式作为冷热数据的界定:
方式 1:使用“下单时间”字段作为判定条件,3 个月内的订单数据作为热数据,3 个月前的订单数据作为冷数据。
方式 2:使用“完结状态”字段作为判定条件,未完结的订单作为热数据,已完结的订单作为冷数据。
关于判断冷热数据的逻辑,这里还有 2 个注意要点必须说明:
1)如果一个数据被标识为冷数据,业务代码不会再对它进行写操作;
2)不会同时存在读冷/热数据的需求。
2、垂直分表
如果业务场景是针对于某几个字段会有很高的并发量的话,我们就可以对宽表进行垂直分表。
例如:文章表中含有文章基础信息,文章简介,文章内容几个字段。
但是例如文章的内容的访问量是要比文章基础信息要少很多的,而且一般文章内容这些字段还会比较大,非常影响磁盘 IO 和网络 IO
针对于这种现象我们就可以进行垂直分表,将原本的文章表分为文章基础信息表和文章内容表,这样就可以很好的解决。