11 - Split database and table

11 - 分库分表

数据量增长,如果保持单库存储会存在性能瓶颈

  • IO瓶颈

    • 数据库缓存不足 大量磁盘 IO

    • 请求数据太多 大量 网络 IO

  • CPU瓶颈

    • 排序 分组 连接查询 聚合统计等 SQL

    • 耗费大量 CPU 资源

可以多造几个库,分散存储,提升数据库性能

1. 拆分策略

1.1. 垂直拆分

垂直分库

表为依据,根据业务不同拆分到不同的库

  1. 每个库的表结构不一样

  2. 每个库的数据不一样

  3. 所有库的并集是全量数据

垂直分表

拆分表结构,根据字段为依据

  1. 每个表的结构不一样

  2. 表中的数据不一样

  3. 所有表的并集是全量数据

1.2. 水平拆分

水平分库

一个数据库的数据,分散开

数据库的数据分开

  • 表结构一样(同一些表),但是数据不一样

  • 所有数据的并集是全量数据

水平分表

  • 将一个表的数据分开

  • 表结构一样(同一个表)

  • 表数据不同

2. 实现技术

多库多表如何操作?

根据要操作的数据找到要操作的库、表

2.1. shardingJDBC

基于AOP原理,需要自行编码配置实现,需要改写、拦截、解析...性能高,支持Java

2.2. MyCat

分库分表中间件,不用调整代码,支持多种语言,性能不及前者

3. MyCat 入门

基于 Java 编写的中间件,可以使用 MySQL 一样使用 MyCat...

  • MySQL

  • JDK

  • MyCat

3.1. 目录

bin 可执行文件,启动停止 mycat

conf 配置文件

lib 依赖包

logs 日志

3.2. 概念

逻辑 --- 物理...

schema 逻辑库 --- 逻辑结构

|分片

逻辑表 table

|分片

分片节点

|关联

数据库 --- 物理结构

MyCat不存储数据,只是管理,数据还是存储在底层的 MySQL...

3.3. 分片配置

分片规则 - 官方默认 sharding-long

...

4. MyCat 分片

4.1. 垂直拆分(Vertical Sharding)

垂直拆分是将不同的表或模块分配到不同的数据库实例中。每个数据库实例存储不同的表结构,从而实现数据的分类存储。

特点

  • 表结构不同:每个数据库实例存储的表结构不同。

  • 适用场景:适用于表数量较多、表之间关联较少的场景。

  • 优点:简化数据库结构,减少单个数据库的负载。

  • 缺点:跨数据库的 JOIN 操作较为复杂,需要额外的处理。

4.2. 水平拆分(Horizontal Sharding)

水平拆分是将同一张表的数据按照某种规则分散到多个数据库实例中。每个数据库实例存储的表结构相同,但数据不同。

特点

  • 表结构相同:每个数据库实例存储的表结构相同。

  • 适用场景:适用于单表数据量较大、需要水平扩展的场景。

  • 优点:解决单表数据量瓶颈,提高查询性能。

  • 缺点:跨分片的查询和事务处理较为复杂。

4.3. Interview Test

垂直拆分和水平拆分的区别

垂直拆分是按表结构拆分,每个数据库实例存储不同的表;水平拆分是按数据行拆分,每个数据库实例存储相同的表结构,但数据不同。

如何配置 MyCat 的水平拆分

通过修改 schema.xml 和 rule.xml 文件,指定表的分片规则和分片算法

5. 分片规则

5.1. 范围(Range Sharding)

根据字段和配置范围的对应情况,决定数据属于哪个分片...

5.2. 取模

根据指定的字段值与节点数量进行求模运算,根据运算结果,决定数据属于哪个分片...

5.3. 一致性 Hash

上面两种方法适合的是数值类型的:因为要检查大小、进行取模运算

根据字段的 Hash 值

一致性哈希提供了保证

相同的哈希银子计算值总是被划分到相同的分区表中,不会因为分区节点的增加而改变原来数据的分区位置...

5.4. 枚举(Enum Sharding)

配置文件中配置可能的枚举值,根据指定数据分布到不同的数据节点上,本规则适用于按照省份,性别,状态拆分数据等业务

5.5. 固定分片 Hash 算法

类似十进制的求模运算,但是是二进制的操作...

特点

  • 如果是求模,连续的值,分别别分配到各个不同的分片,但是此算法会将连续的值可能分配到相同的分片,降低事务处理的难度

  • 可以均匀分配也可以非均匀分配

  • 分片字段必须为数字类型

5.6. 字符串 Hash 解析

截取字符串中指定位置的子字符串,进行 Hash 算法,算出分片

5.7. 按(天)日期分片

对于日期数据...

5.8. 自然月分片

每个自然月为一个分片...

6. MyCat管理和监控

6.1. 原理...

作为中间件

可以完成:

解析 SQL、分片分析、路由分析、读写分离分析--- 底层DB

DB 返回结果 ---结果合并、聚合处理、排序处理、分页处理

6.2. 管理

默认开通两个端口:

  • 8066 DML 和 DDL 操作

  • 9066 管理端口,管理整个集群状态

常用命令

show @@help											查看管理工具
show @@version									查看版本
reload @@config									加载配置文件
show @@datasourse								查看数据源
show @@datanode									查看分片节点信息
show @@threadpool								查看线程池信息
show @@sql											查看执行的 SQL
show @@sql.sum									查看执行的 SQL 统计

6.3. Mycat-eye

介绍

Mycat-web 图形化监控服务...可以监控 linux 系统的 cpu、内存、磁盘......

Last updated