数据库优化 -水平分库与垂直分库

104 篇文章 0 订阅
17 篇文章 0 订阅

数据库优化 -水平拆分与垂直拆分

垂直拆分

垂直拆分是根据数据库里面的数据表的相关性进行拆分。
例:一个数据库里面存放着用户数据(用户表),又存储订单数据(订单表),那么使用垂直分库可以把用户数据放到用户库、把订单数据放到订单库。垂直分表是对数据表进行垂直拆分的一种方式,常用于把一个多字段的大表按常用字段和非常用字段进行拆分,每个表里面的数据记录数一般情况下是相同的,只是字段不一样,使用主键关联

例子

User表
在这里插入图片描述
垂直拆分
User表
在这里插入图片描述

Class表
在这里插入图片描述

垂直拆分的优点是:

(1)可以使得行数据变小,一个数据块(Block)就能存放更多的数据,在查询时就会减少I/O次数(每次查询时读取的Block 就少);
(2)可以达到最大化利用Cache的目的,具体在垂直拆分的时候可以将不常变的字段放一起,将经常改变的放一起;
(3)数据维护简单。

垂直拆分的缺点是:

(1)主键出现冗余,需要管理冗余列;
(2)会引起表连接JOIN操作(增加CPU开销);
(3)不能解决单表数据量过大的问题**(需要水平拆分)**
(4)事务处理复杂。

水平拆分

水平拆分是通过某种策略将数据分片来存储,分库内分表和分库两部分,每片数据会分散到不同的MySQL表或库,达到分布式的效果,能够支持非常大的数据量。前面的表分区本质上也是一种特殊的库内分表。

库内分表,仅仅是单纯的解决了单一表数据过大的问题,由于没有把表的数据分布到不同的机器上,因此对于减轻MySQL服务器的压力来说,并没有太大的作用,大家还是竞争同一个物理机上的IO、CPU、网络,这个就要通过分库来解决。

例子

Employee表
在这里插入图片描述
水平拆分
Employee_A表
在这里插入图片描述

Employee_B表
在这里插入图片描述

水平拆分的优点是:

(1)不存在单库大数据和高并发的性能瓶颈;
(2)应用端改造较少;
(3)提高了系统的稳定性和负载能力。

水平拆分的缺点是:

(1)分片事务一致性难以解决;
(2)跨节点Join性能差,逻辑复杂;
(3)数据多次扩展难度跟维护量极大。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值