垂直拆分
垂直分库
通俗来说就是专表专库,用户表放到用户库中,订单表放到订单库中
优点是可以在业务层面上解耦合、同时也方便对数据库进行扩展
缺点是部分表无法进行join操作,只能通过接口聚合的方式解决
(join操作即是连接,包括内连接、左连接和右连接)
目前来说,解决方法是在service层多次查询,比如说查权限,先通过角色表查到权限id,再去权限表查一遍权限的内容
垂直分表
垂直分表是一种数据库优化策略,它将一个表按照字段分成多个表,每个表存储其中一部分字段123。这种方法的核心理念是将表从“宽”变“窄”。
例如,假设我们有一个商品信息表,其中包含商品的基本信息(如名称、价格、图片等)和商品的详细描述。在这种情况下,我们可以将这个表垂直分割成两个表:一个存储商品的基本信息,另一个存储商品的详细描述。
垂直分表的优点:
1、将字段分开,从而减少了读取某表时候的IO操作,从而一定程度上避免IO争抢并且减少了锁表的概率(在并发情况下,如果多个用户同时读取或修改表可能就会造成锁表的现象)
2、因为将基本信息和详细描述分开了,当去查看基本信息时候效率就会提高很多
3、同时垂直分出的表也可以放在不同的库中,进一步降低负载
缺点:
如果要读取完整信息,可能要多次查表,并且在后台进行拼贴
水平拆分
水平拆分就好理解了,目的就是为了减少某表的数据量,将一张表拆成几张表,不去改变字段等
分为库内分表和分库分表
库内
分库(分库的原因是为了减少库的压力,因为一个物理机的大小是有限的)
分表策略
按ID区间、按时间、取模分表、主从读写分离
取模分表:选取一个字段,通常是主键,分几个表除以几就行
优点是平均
缺点是当表的数量改变时,需要重新分配所有的数据