MySQL分库分表的实现(一)

一、分库分表的背景

单库单表的存储能力和连接数有限,随着时间和业务发展,造成表里面数据越来越多,如果再去对数据库表执行curd 操作时,会出现响应缓慢,卡顿等现象,也就是出现性能瓶颈。

二、分表的一般标准

单表数据量过大(超过千万级)并且性能显著下降,影响用户体验。

三、分库分表的方式

方式

分库分表有两种方式:垂直切分和水平切分:

1、垂直切分:垂直分表和垂直分库

2、水平切分:水平分表和水平分库。

含义

垂直分表:把一个表中不经常查询或text,blob等长文本类型字段的拆分到新表中。

垂直分库:按业务功能划分,例如在商城类应用中,把商品、订单、库存、物流分到不同的库中。

水平分表(分库):把一张表的行数据按某个规则(如用户 ID、时间)分散到多个表 / 库中,拆分后每个表 / 库的结构完全相同,只是数据不同。

举个例子:

比如订单表有 1 亿行数据,按用户 ID 哈希拆成 10 张表,每张表只有 1000 万行;

再进一步,把这 10 张表分散到 2 个数据库实例中,就是水平分库。

怎样理解垂直分表和水平分表,可用一句话来方便理解:垂直切分是分字段,水平切分是分记录。

四、分库分表应用和问题

1、应用

(1)在数据库设计时候考虑垂直分库和垂直分表

(2)随着数据库数据量增加,不要马上考虑做水平切分,首先考虑缓存处理,读写分离,使

用索引等等方式,如果这些方式不能根本解决问题了,再考虑做水平分库和水平分表。

2、分库分表问题

(1)跨节点连接查询问题(分页、排序)

(2)多数据源管理问题。

如何解决,本系列文章介绍使用ShardingSphere来解决。

五、ShardingSphere简介

1、一套开源的分布式数据库中间件解决方案

2、目前主要有2个产品:Sharding-JDBC 和 Sharding-Proxy

3、定位为关系型数据库中间件,合理在分布式环境下使用关系型数据库操作

其他类似产品:1. Mycat; 2.Vitess,这里不作介绍。

关于ShardingSphere的使用,我通过系列博客的形式进行总结。

相关推荐
YOU OU5 小时前
Redis基础常识与命令
数据库·redis·缓存
Database_Cool_7 小时前
OLTP 和 OLAP 区别详解:分析型数据库和事务型数据库怎么选(附阿里云 AnalyticDB MySQL 选型指南)
数据库·mysql·阿里云
爱写代码的阿森7 小时前
鸿蒙三方库 | harmony-utils之KvUtil键值型数据库操作详解
数据库·华为·harmonyos·鸿蒙·huawei
Database_Cool_8 小时前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
姜太小白9 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
窝子面9 小时前
手搓最简前后端协作-node
javascript·数据库
吳所畏惧9 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈9 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HPFBoy9 小时前
log4net 数据库存日志正确配置
数据库