MySQL分库分表的实现(一)

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-Proxy3、定位为关系型数据库中间件合理在分布式环境下使用关系型数据库操作其他类似产品1. Mycat; 2.Vitess这里不作介绍。关于ShardingSphere的使用我通过系列博客的形式进行总结。