一、为什么要分库分表
1、单表数据量过大存在性能瓶颈
2、数据库读写QPS过高,数据库连接数不足
(性能+可用性)
二、分多少
按照数据量和连接数评估
三、怎么分
1、垂直切分
将一张表中不同字段拆分到不同的表中
2、水平切分
按照业务规则,分为不同的表
3、垂直扩展
提高单机处理能力(加内存)
4、水平扩展
复制多个库表,通过分布式的方式,让请求均匀的分布到不同的机器上
四、分库分表中的一些问题
大部分可通过MyCat等中间件完成
1、如何让数据均匀散落在各个分库分表内?(热点数据导致某个库表查询压力偏大)
通过负载均衡算法(一致性hash)将数据均匀地分布到每个库表中,
2、主键id唯一性问题
(1)数据库自增,分库分表问题--------redis自增,速度问题------------雪花算法,前端展示19位丢失精度----------雪花漂移16位,数据量递增,节点用完时,位数增加------------转成string类型
(2)让所有的分库使用的ID段按照等差数列进行分隔,每次ID段用完之后,再按照固定的步长比递增
3、事务问题
(1)分布式事务
由应用服务器/数据库去管理事务,实现简单。
(2)应用程序+数据库共同控制
将多个大事务拆分成可由单个分库处理的小事务,由应用程序去控制这些小事务。
4、历史数据如何平滑迁移
使用数据传输服务DTS或者其他?
(1)停机:直接将单库数据复制到分库中
(2)不停机:复制某个时间点前的数据到分库中,切换完成后将某个时间点后产生的数据一并复制过来
分库分表
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 一、背景 提起分库分表,对于大部分服务器开发来说,其实并不是一个新鲜的名词。随着业务的发展,我们表中的数据量会变的...
- 随着互联网的高速发展,带来了海量数据存储的问题,比如像物联网行业,每个智能终端每天进行数据采集和上报,每天能够产几...
- 数据存储引擎 存储引擎是 MYSQL 的核心技术,不同的存储引擎使用不同的存储机制、索引技巧、锁定水平并最终提供不...