当前位置:首页 > 数据库 > MySQL分表分库基础

MySQL分表分库基础

7个月前 (05-22)67

系列文章目录


什么是分库分表

分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。

什么时候需要分库分表

《java开发手册》推荐:如果预计三年后的数据量达到单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。

分表分库方式及其区别

分表分库方式包括:

  • 客户端实现分表分库
  • 服务端实现分表分库

客户端实现分表分库

MySQL分表分库基础 _ Java侠

框架

  • ShardingSphere-JDBC

优缺点

  • 优点:
    • 轻量,范围更加容易界定,只是 JDBC 增强
    • 性能高,JDBC 直连数据库,无需二次转发
  • 缺点:不能够保证数据库的安全性、内存溢出,归并数据结果是没有解耦,有可能会影响我们业务逻辑

服务端实现分库

MySQL分表分库基础 _ Java侠

框架

  • MyCat
  • ShardingSphere-Proxy

优缺点

  • 优点:
    • 不与业务模块耦合
    • 更有效的管理数据库的连接
  • 缺点:效率比较低

垂直/水平分库分表

垂直/水平分库分表分为四种方式:垂直分库、水平分库、垂直分表、水平分表

垂直拆分

垂直分库

  • 概念:垂直分库是指按照业务将表进行分类,分布到不同的数据库上
  • 目的:
    • 实现业务解耦,符合微服务思想
    • 通过分库提升IO

MySQL分表分库基础 _ Java侠

垂直分表

  • 概念:将一个表按照字段分成多表,每个表存储其中一部分字段
  • 目的:
    • 提升查询性能
    • 冷热数据分开,避免IO争抢资源
  • 原则:
    • 大字段(Text,Blob字段)分表
    • 少访问的数据分表

MySQL分表分库基础 _ Java侠

水平拆分

水平分库

  • 概念:可以对同一张表数据实现拆分放到多个不同的数据库表中存放
  • 目的:解决单一库数据量过大性能的问题

MySQL分表分库基础 _ Java侠

水平分表

  • 概念:水平分表是在同一个数据库内,把同一个表的数据按一定规则拆到多个表中
  • 目的:解决单一表数据量过大性能的问题
    MySQL分表分库基础 _ Java侠

分表分库策略

  • 取余/取模:优点:均匀存放数据 缺点:扩容麻烦
  • 按照范围分片:容易扩容,数据分布不均匀
  • 按照日期进行分片:常用于订单等场景,容易将热点数据区分
  • 按照枚举值分片
  • 二进制取模范围分片
  • 一致性hash分片:数据存放不均匀
  • 按照目标字段前缀指定的进行分区
  • 按照前缀ASCII码和值进行取模范围分片

分表分库缺点

  • 事务一致性问题
    数据存放在不同的库(可能存在不同服务器)可能带来分布式事务问题
  • 跨节点关联查询问题
    分库之后不能进行关联查询,只能查询多次之后进行合并,效率较低
  • 跨节点分页、排序函数
    需要在不同的节点进行分页以及排序之后,进行汇总,效率较低
  • 主键重复问题
    需要解决跨库主键重复问题,可用分布式主键生成解决
  • 公共表处理
    公共表(比如字典表)查询频繁,需要在每个库都保存一份,所有更新操作都同时发送到所有分库执行
  • 运维工作量
    分表分库之后,每次读写操作都需要知道实际SQL是在哪个表库执行,运维难度加大

作者:janyxe
来源链接:https://blog.csdn.net/janyxe/article/details/123334685

“MySQL分表分库基础” 的相关文章

Windows mysql5.5 安装图解 mysql图文安装教程

Windows mysql5.5 安装图解 mysql图文安装教程

1、首先单击MySQL5.5.21的安装文件,出现该数据库的安装向导界面,单击“next”继续安装,如图所示: 2、在打开的窗口中,选择接受安装协...

MySQL分库分表备份脚本

备份思想 1. 拿到库名列表 2. 循环数据库,分别备份 分库备份脚本 vim oldboy07_01.sh #!/bin/bash BAKPATH=/...

Mysql拼接查询结果

Mysql拼接查询结果

如: 如下图,通常省市县都是单独存放在不同的表中的。 但是我们前端,还需要把省市县合成一个来展示例如下图中显示的收货地址。...

mysql 数据库 分表后 怎么进行分页查询?Mysql分库分表方案?

mysql 数据库 分表后 怎么进行分页查询?Mysql分库分表方案?

Mysql分库分表方案   1.为什么要分表: 当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的...

MYSQL查询空值/NULL值

 select * from XXXX where YYYY is NULL 作者:Bupt_Luke 来源链接:https://b...

mysql 5.5安装教程图解

mysql 5.5安装教程图解

   mysql是数据库的服务器端,这个安装教程比较复杂,如果安装失败的话,就会让注册表信息残留在电脑的隐蔽文件里面,而且会影响第二次安装Mysql,因此...

Linux环境 MySql详细安装步骤

Linux环境 MySql详细安装步骤

*注:本文安装的是mysql5.6的版本,反复安装三遍总结下来的详细安装步骤。 1.解压MySQL压缩包到当前目录 tar -xzf...

最新Mysql 8.0.27安装指南

最新Mysql 8.0.27安装指南

由于版本跟新,在网上找了许久的攻略,都不是很齐全。所以自己整理了一篇; 1.首先下载mysql:mysql官网下载链接 或者 链接:http...

MySQL学习(三)主备分库分表和恢复数据 --- 2019年2月

1、MySQL主备切换   readonly 设置对超级(super)权限是无效的,而用于同步更新的线程,就拥有超级权限。   建议在做主备数据库的时候,将备用数据库设置为只...

mysql中的json查询

mysql中的json查询

参考文章 MySQL 5.7新增对JSON支持 1,json格式 处理方式: select * from log where dat...