MySQL 扩展

本文介绍了MySQL水平扩展的三种策略:复制、按功能拆分和数据分片。复制通过创建备库来提升读性能,但可能带来重复缓存问题。按功能拆分每个节点包含特定应用数据,而数据分片是最常用且成功的扩展方法,通过分割数据到不同节点以提高写性能。分片策略需要考虑分区键选择和管理复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

MySQL 水平拓展的策略分为三个部分:

  • 复制
  • 拆分
  • 数据分片(sharding)
二、复制

最简单也最常见的向外扩展的方法是通过复制将数据分发到多个服务器上,然后将备库用于读查询。这种技术对于以读为主的应用很有效,它也有一些缺点,例如重复缓存等等。

三、按功能拆分

按功能拆分,每个节点只包含特定应用所需要的数据,各个部分无须共享数据,可以按功能区域进行划分。如果有数据交叉的需求,也可在应用层执行联合查询。
在这里插入图片描述
这种方法的缺点是一个功能区还是只能进行垂直扩展 (提升单机性能),后续很难继续扩展。

四、数据分片

目前大型MySQL应用方案中,数据分片是最通用最成功的方法。它把数据分割成一小片,或者一块,然后存储到不同的结点中,分片可以大幅提高写性能

在这里插入图片描述

可以先使用复制来扩展博客服务的读查询,直到它不在奏效。然后可以把服务器划分为三个部分:用户信息、文章、评论,可以在应用层执行联合查询。
在这里插入图片描述

采用分片的应用通常会有一个数据库访问抽象层,用来降低应用和分片数据存储之间通信的复杂度,但无法完全隐藏分片。太多抽象会导致低效率,例如查询所有的结点,可实际上需要的数据只在单一节点上。

4.1 分区键的选择

选择分区键时,尽可能选择那些能够避免跨分片查询的。分片和节点不一定是一对一的关系,应该让分片的大小比节点容量小很多,这样易于管理。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.2 在节点上部署分片

在这里插入图片描述

我们倾向于使用每个分片一个数据库的方式,并把分片号写到数据库名和表名中。这会增加ALTER TABLE这类操作的复杂度,但也有如下一些优点:
在这里插入图片描述

多个数据库实例

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值