分库分表 Sharding: 2. 分库分表种类

本文介绍了数据库分库分表的两种主要方式:垂直分片和水平分片,并详细阐述了水平分片的具体实现方法,包括只分表、只分库及分库分表等策略。

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

2.    分库分表种类
拆分数据库有垂直拆分和水平拆分。
2.1    垂直分片
按照业务拆分的方式称为垂直分片,又称为纵向拆分,它的核心理念是专库专用。 在拆分之前,一个数据库由多个数据表构成,每个表对应着不同的业务。而拆分之后,则是按照业务将表进行归类,分布到不同的数据库中,从而将压力分散至不同的数据库。 下图展示了根据业务需要,将用户表和订单表垂直分片到不同的数据库的方案。

垂直分片往往需要对架构和设计进行调整。通常来讲,是来不及应对互联网业务需求快速变化的;而且,它也并无法真正的解决单点瓶颈。 垂直拆分可以缓解数据量和访问量带来的问题,但无法根治。如果垂直拆分之后,表中的数据量依然超过单节点所能承载的阈值,则需要水平分片来进一步处理。垂直拆分,一般是为了划分服务,不同的团队负责的服务对应的表统一到不同的库中,利于开发和维护。

2.2    水平分片
水平分片又称为横向拆分。相对于垂直分片,它不再将数据根据业务逻辑分类,而是通过某个字段(或某几个字段),根据某种规则将数据分散至多个库或表中,每个分片仅包含数据的一部分。 例如:根据主键分片,偶数主键的记录放入 0 库(或表),奇数主键的记录放入 1 库(或表),如下所示。

select * from t_user where id=1

select * from t_user where id=2

水平分片从理论上突破了单机数据量处理的瓶颈,并且扩展相对自由,是数据分片的标准解决方案。

分库分表种类介绍
2.3    分库分表种类介绍
水平分表从具体实现上又可以分为 3 种:只分表、只分库、分库分表,下图展示了这三种情况:


2.3.1    只分表
只分表:将 db 库中的 orders 表拆分为 2 个分表,orders0 和 orders1,这两个表还位于同一个库中。
2.3.2    只分库
只分库:将 db 库拆分为 db0 和 db1 两个库,同时在 db0 和 db1 库中各自新建一个 orders 表,db0. orders 表和 db1. orders 表中各自只存原来的 db. orders 表中的部分数据。
2.3.3    分库分表
分库分表:将 db 库拆分为 db0 和 db1 两个库,db0 中包含 orders0、orders1 两个分表,db1 中包含 orders3、orders4 两个分表。
在分库分表的情况下,数据是如何拆分的呢?假设 db 库的 orders 表中原来有 4000W 条数据,现在将 db 库拆分为 2 个分库 db0 和 db1,orders 表拆分为 orders0、orders1、orders2、orders3 四个分表,每个分表存储 1000W 条数据 (可能因分片的值,数量略有差距)。    分片主要就是指这种分库分表.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值