个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~
目录
- ②⑩① 【MySQL】什么是分库分表?拆分策略有什么?
- 1. 性能瓶颈
- 2. 拆分策略
- ⚪ 垂直拆分
- ⚪ 水平拆分
- 3. 实现技术
- 4. MyCat中间件
②⑩① 【MySQL】什么是分库分表?拆分策略有什么?
1. 性能瓶颈
单数据库存在问题
:
随着互联网及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行数据存储,存在以下性能瓶颈:
- 1.
IO瓶颈
:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较低。请求数据太多,带宽不够,网络IO瓶颈。 - 2.
CPU瓶颈
:排序、分组、连接查询、聚合统计等SQL会耗费大量的CPU资源,请求数太多,CPU出现瓶颈。
分库分表的中心思想都是将数据分散存储,使得单一数据库/表的数据量变小来缓解单一数据库的性能问题,从而达到提升数据库性能的目的。
2. 拆分策略
分库分表 的 拆分方式
:
- 🚀垂直拆分
-
- 垂直分库
- 垂直分表
- 🚀水平拆分
-
- 水平分库
- 水平分表
⚪ 垂直拆分
垂直分库
:
- 以表为依据,根据业务将不同表拆分到不同库中去。
-
- 特点:
-
- ①每个库的表结构都不一样。
- ②每个库的数据不一样。
- ③所有库的并集是全量数据。
垂直分表
:
- 以字段为依据,根据字段属性将不同字段拆分到不同表中。
-
- 特点:
-
- ①每个表的结构都不一样。
- ②每个表的数据也不一样,一般通过一列(主键/外键)关联。
- ③所有表的并集是全量数据。
⚪ 水平拆分
水平分库
:
- 以字段为依据,按照一定策略,将一个库的数据拆分到多个库中。
-
- 特点:
-
- ①每个库的表结构都一样。
- ②每个库的数据都不一样。
- ③所有库的并集是全量数据。
水平分表
:
- 以字段为依据,按照一定策略,将一个表中的数据拆分到多个表中去。
-
- 特点:
-
- ①每个表的表结构都一样。
- ②每个表的数据都不一样。
- ③所有表的并集是全量数据。
3. 实现技术
shardingJDBC
:
shardingJDBC技术 基于AOP原理,在应用程序中对本地执行的SQL进行拦截,解析、改写、路由处理。需要自行编码配实现,只支持java语言,性能较高。
MyCat
:
MyCat 是数据库分库分表中间件,不用调整代码即可实现分库分表,支持多种语言,性能不及shardingJDBC技术。
4. MyCat中间件
MyCat
:
MyCat是一个开源的、活跃的、分布式的数据库中间件 ,可以像使用MySQL一样来使用MyCat,对于开发人员来说根本感觉不到MyCat的存在。MyCat中间件主要用于在大型数据库应用中实现数据库的分片和读写分离。它支持MySQL和MariaDB,并提供了水平分片、垂直分片、分布式事务等功能。以下是MyCat中间件的一些主要特点和功能:
- 分片和分布式架构:
- 水平分片: MyCat支持水平分片,将数据水平划分为多个片段,每个片段可以存在于不同的物理节点上。
- 垂直分片: 可以通过垂直分片将不同的表划分到不同的物理节点上,以提高查询性能和灵活性。
- 读写分离:
- MyCat支持读写分离,可以配置多个只读节点,将读请求分发到这些节点上,从而提高整体查询性能。
- 分布式事务:
- MyCat支持分布式事务,通过X/Open XA协议实现,确保在跨多个数据库节点的事务中保持一致性。
- SQL解析和路由:
- MyCat能够解析SQL语句并将其路由到相应的分片节点,以确保数据操作被正确地分发到对应的数据库。
- 连接池管理:
- MyCat提供了连接池管理功能,有效地管理数据库连接,降低系统的连接开销。
- 支持多租户:
- MyCat支持多租户架构,使得不同的租户可以共享相同的物理资源,同时保持数据的隔离性。
- 动态扩展和缩减:
- MyCat支持动态扩展和缩减节点,便于根据业务需求进行系统的水平伸缩。
- 监控和管理:
- 提供了丰富的监控和管理工具,可以监测集群的状态、性能指标等,有助于及时发现和解决问题。
- 开源社区支持:
- MyCat是一个开源项目,拥有活跃的社区,用户可以获得开源社区的支持和贡献。
MyCat中间件为大型数据库应用提供了灵活性、可扩展性和高性能,使得应用程序能够更好地应对大规模数据存储和访问的挑战。
MyCat的优势
:
- MyCat优势:
-
- ①性能可靠稳定。
- ②强大的技术团队。
- ③体系完善。
- ④社区活跃。
MyCat 核心概念
: