Mysql 分库分表

垂直分库/分表

垂直分库
  • 概念:根据业务模块的不同,将不同的表分散到不同的数据库中。例如,一个电商系统可以将用户表、商品表、订单表分别放入用户数据库、商品数据库和订单数据库中。
  • 优点:降低了单个数据库的负担,提高了系统的可维护性和扩展性,不同业务模块之间的数据隔离,减少了锁的竞争。
  • 缺点:需要处理跨库的关联查询,增加了开发和运维的复杂度。
垂直分表
  • 概念:在一个数据库内,根据表中的字段访问频率或相关性,将表分割成两个或更多的表。例如,将一个包含常用字段(如用户ID、用户名)和不常用字段(如用户地址详情)的用户表,拆分为用户基本信息表和用户详细信息表。
  • 优点:减少了单表的宽度,提高了查询速度,特别是对于经常访问的字段。
  • 缺点:涉及到联合查询时可能需要额外的处理,增加了应用层的逻辑复杂度。

水平分表

  • 概念:当单个表的数据量非常大时,按照某种规则(如用户ID取模、时间范围等)将数据分布到多个相同的表中,这些表通常称为分片表。
  • 实现方式:比如,可以创建多个order_001, order_002, ...这样的表,根据用户ID或者其他业务键进行散列计算决定数据存储在哪张表中。
  • 优点:显著减少单个表的数据量,提高了查询效率,易于扩展。
  • 缺点:涉及复杂的路由逻辑,需要处理跨分片的事务和关联查询问题,可能需要引入中间件来管理分片。

分库分表的一般步骤:

  1. 评估需求:分析数据量、访问模式、业务增长预测,确定是否需要分库分表以及采用哪种策略。
  2. 设计分片策略:选择合适的分片键,这将直接影响数据分布的均匀性和查询效率。
  3. 实施分片:根据策略创建相应的数据库和表结构。
  4. 数据迁移:可能需要编写脚本或使用工具将现有数据迁移到新的分片架构中。
  5. 修改应用代码:调整应用层的数据库访问逻辑,以适应分库分表后的数据访问方式。
  6. 监控与优化:实施后需要持续监控性能,根据实际情况进行调整优化。

使用工具与中间件:

  • 中间件:如MyCAT、ShardingSphere等,它们提供了数据库分片、读写分离、分布式事务等高级功能,简化了分库分表的实现和维护工作。
  • 数据库代理:如ProxySQL,可以在不改变应用代码的情况下实现读写分离和简单的路由规则。

分库分表是一个复杂的过程,需要根据实际业务需求仔细规划和实施。

相关推荐
Miqiuha2 分钟前
lock_guard和unique_lock学习总结
java·数据库·学习
一 乐1 小时前
学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
Java探秘者5 小时前
Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境
java·开发语言·数据库·spring boot·spring cloud·maven·idea
2301_786964365 小时前
3、练习常用的HBase Shell命令+HBase 常用的Java API 及应用实例
java·大数据·数据库·分布式·hbase
苹果醋35 小时前
大模型实战--FastChat一行代码实现部署和各个组件详解
java·运维·spring boot·mysql·nginx
阿维的博客日记6 小时前
图文并茂解释水平分表,垂直分表,水平分库,垂直分库
数据库·分库分表
wrx繁星点点7 小时前
事务的四大特性(ACID)
java·开发语言·数据库
小小娥子7 小时前
Redis的基础认识与在ubuntu上的安装教程
java·数据库·redis·缓存
DieSnowK7 小时前
[Redis][集群][下]详细讲解
数据库·redis·分布式·缓存·集群·高可用·新手向
计算机学姐8 小时前
基于SpringBoot+Vue的高校运动会管理系统
java·vue.js·spring boot·后端·mysql·intellij-idea·mybatis