当前位置: 首页 > news >正文

MySQL分库分表

何时需要分库分表

分库分表通常在以下场景中需要考虑:

  • 数据量过大:单表数据量超过千万级别,查询性能明显下降,索引效率降低。
  • 并发压力高:数据库连接数不足,频繁出现锁竞争或资源争用。
  • 业务解耦:不同业务模块需要独立维护数据,避免相互影响。
  • IO瓶颈(磁盘IO,网络IO)、CPU瓶颈(聚合查询,连接数太多)

 

分库:我本来一个数据库,我拆成多个数据库进行存储

分表:我本来一张表的数据,拆成多个表进行存储

垂直拆分

垂直分库

拆分成不同库里面存储不同业务数据。用的比较多,微服务常用


 垂直分表

把字段包含数据多的、不常用的分开。分表并不一定是在多个库,也可以在一个库里

比如:一些很长的数据,比如商品描述,文章等


水平拆分

水平分库

每个库存放的数据都不一样,应用根据路由规则去查询。

  • 按业务分库:例如订单库、用户库分离。
  • 按数据分片:如将订单库按地域拆分为orders_db_eastorders_db_west

 

水平分表 

也是根据路由规则去查询数据

 


    分库分表中间件

    常用工具简化路由逻辑:

    • ShardingSphere:Apache开源的分布式数据库生态。
    • MyCat:基于Proxy的分库分表方案。

    ShardingSphere配置示例(YAML)

     


    注意事项

    • 分布式事务:跨库操作需引入Seata等事务框架。
    • 跨分片查询:避免JOIN,改用冗余字段或业务层聚合。
    • ID生成:使用雪花算法(Snowflake)替代自增ID。
    • 扩容难度:预先设计好分片键的扩展性。

     

    http://www.dtcms.com/a/211493.html

    相关文章:

  • 对神经正切核的理解和推导(1)
  • 浅析SpringBoot中的classpath
  • 互联网和以太网之是什么与区别
  • DVWA文件上传笔记
  • 踩坑记录:RecyclerView 局部刷新notifyItemChanged多次调用只触发一次 onBindViewHolder 的原因
  • 数据库调优与数据表的范式设计
  • LangGraph:部署智能应用
  • 在 .NET 环境下实现跨进程高频率读写数据
  • 再论自然数全加和-3
  • 使用CodeBuddy实现网页自动连点器
  • 【通用技巧】技术文章工业级指南:目标定位、架构设计与持续演进
  • java中的SPI(Service Provider Interface)机制解读
  • AWTK嵌入式图形框架开发备忘(二)
  • LangGraph 实战指南:长期记忆管理
  • 海外IP代理在跨境电商选品、运营、风控的实战应用解析
  • Java面向对象 一
  • 海思SVP_NPU开发适配
  • C++----Vector的模拟实现
  • windows中JDK切换版本
  • RPA+电子处方+在线问诊:数字药店APP智能化源码开发方案探索
  • 【系统设计】2WTPS生产级数据处理系统设计Review
  • 详细设计文档怎么写?@附参考原件
  • 字节开源智能研究助手 DeerFlow:打造 AI 驱动的动态任务协作平台
  • PS2025 v26.7 Photoshop2025+AI生图扩充版,支持AI画图
  • SpringBoot入门
  • LangGraph的智能评估
  • 51、c# 请列举出6个集合类及用途
  • pyhton基础【2】基本语法
  • 代码随想录算法训练营第四十九天
  • 【Linux 学习计划】-- Linux调试工具 - gdb cgdb