8.2 分库分表简介


1. 分库分表介绍

随着业务规模扩大,单一数据库实例可能无法承载高并发的读写请求或海量数据存储。分库分表是一种通过拆分数据的方式,提升数据库性能和可扩展性的技术。


1.1 拆分策略

分库分表的拆分策略主要分为两种:

垂直拆分
  • 定义:根据业务模块或表的字段进行拆分。
  • 类型:
    1. 垂直分库
      将不同业务模块的表拆分到不同的数据库中。
      适用场景:电商系统中的用户模块和订单模块分布在不同的数据库中。
    2. 垂直分表
      将表中的列拆分为多个表,常用于大字段分离。
      适用场景:将用户表的主信息和扩展信息分成两张表。
水平拆分
  • 定义:根据数据范围或规则对同一张表的数据进行拆分。
  • 类型:
    1. 水平分库
      按数据范围将数据分布到不同的数据库中。
      适用场景:订单数据按用户 ID 或时间拆分到不同的数据库。
    2. 水平分表
      按数据范围将数据分布到多张表中,所有表在同一数据库。
      适用场景 :将订单表按年份拆分为 order_2023order_2024 等。
垂直拆分和水平拆分的区别
拆分类型 核心思想 适用场景 优点 缺点
垂直拆分 按模块或字段拆分 数据库结构较复杂 简化表结构,便于优化 跨库或跨表查询成本较高
水平拆分 按数据范围或规则拆分 单表数据量较大 减少单库压力,提升并发能力 数据路由复杂,事务处理难度增加

2. 分库分表实现技术

实现分库分表需要借助中间件或框架,常见的有 ShardingJDBCMyCat


2.1 ShardingJDBC

简介

ShardingJDBC 是 Java 的数据库分库分表中间件,作为 JDBC 驱动程序嵌入应用程序中,负责数据库分片、读写分离等功能。

作用
  • 数据库分片:支持水平分库和分表。
  • 读写分离:自动路由读写请求到主库或从库。
  • 分布式事务:支持两阶段提交。
实现原理
  • 数据分片规则:通过配置分片键和算法实现数据路由,例如按照用户 ID 取模。
  • 分片执行:将 SQL 请求拆分为多条子查询,并合并查询结果返回。

示例配置:

yml 复制代码
sharding:
  tables:
    order:
      actualDataNodes: db${0..1}.order_${0..1}
      databaseStrategy:
        inline:
          shardingColumn: user_id
          algorithmExpression: db${user_id % 2}
      tableStrategy:
        inline:
          shardingColumn: order_id
          algorithmExpression: order_${order_id % 2}

2.2 MyCat

简介

MyCat 是基于代理的分库分表中间件,通过代理层实现对应用透明化的数据库分片和管理。

作用
  • 支持垂直和水平拆分。
  • 实现主从复制与读写分离。
  • 提供分布式事务支持。
实现原理
  • SQL 解析与路由:解析 SQL 中的分片键,依据配置规则选择目标库或表。
  • 执行与合并:将查询分发到多个分片数据库中,合并结果返回客户端。

示例分片规则:

properties 复制代码
schema.s0.dataNode=dn1,dn2
table.orders.dataNode=dn$->{order_id%2}
table.orders.rule=order_id%2

3. 总结

技术 适用场景 优点 缺点
ShardingJDBC 单体或微服务架构中使用 易于集成,支持多种分片算法和事务处理 与应用强耦合,需修改应用代码
MyCat 分布式架构,数据量超大场景 高性能,支持跨语言和分布式事务 部署复杂,需单独维护代理服务器

通过合理使用分库分表技术,可以有效解决大数据量和高并发问题,为业务提供强大的数据库支撑。

相关推荐
爱吃羊的老虎4 分钟前
【大模型】向量数据库:Chroma、Weaviate、Qdrant
数据库·语言模型
数据大魔方5 分钟前
【期货量化实战】跨期套利策略:价差交易完整指南(TqSdk源码详解)
数据库·python·算法·github·程序员创富
l1t15 分钟前
NineData第三届数据库编程大赛:用一条 SQL 解数独问题我的参赛程序
数据库·人工智能·sql·算法·postgresql·oracle·数独
麦麦大数据1 小时前
J009 美食推荐可视化大数据系统vue+springboot
vue.js·spring boot·mysql·推荐算法·美食·可视化分析·沙箱支付
菜鸟笔记本2 小时前
linux设置定时备份mysql数据
linux·mysql·oracle
千寻技术帮2 小时前
10347_基于Springboot的新疆旅游管理系统
spring boot·mysql·旅游·在线旅游
施嘉伟2 小时前
一次生产环境 SQL 不走索引的排查过程
数据库·sql
踏浪无痕2 小时前
SQLInsight:从JDBC底层到API调用的零侵入SQL监控方案
数据库·后端·开源
小宇的天下2 小时前
Calibre nmDRC Results(19-1)
服务器·数据库·oracle
Web项目开发3 小时前
Mysql创建索引的SQL脚本,复制粘贴即可使用
数据库·sql·mysql