1、分库分表基础理论(一)
千里之行,始于足下
正文
在高性能系统的要求下,复杂的系统当单表数据量增加到几千万甚至上亿条记录时,查询延迟无疑是影响高性能系统的瓶颈。业内提供的解决的方案是分库分表,冷热数据分离。
一、分库分表:
1、垂直分片:
按照业务维度将表拆分到不同的数据库,专库专用,分担数据库压力
2、水平分片:
(1)、水平分库
以字段为依据,按照一定策略,将一个库中的数据拆分到多个库中。
每个库的结构都一样;数据都不一样;所有库的并集是全量数据;
(2)、水平分表
以字段为依据,按照一定策略,将一个表中的数据拆分到多个表中。
每个表的结构都一样;数据都不一样;所有表的并集是全量数据;
二、数据分片方案:
1、Hash取模分片:
id%10 = 1 --> database 1 分片键
id%10 = 2 --> database 2
(1)、优点:数据存放比较均匀
(2)、缺点:当模数扩容时,需要大量的数据迁移
2、数值范围分片:
1月份 --> database 1
2月份 --> database 2
(1)、优点:扩容不需要数据迁移
(2)、缺点:可能存在某范围内数据激增,产生数据倾斜
3、根据业务场景,灵活制定分片策略:
整体按照范围分片,保证扩容时,数据不需要迁移;范围内按照取模分片,使数据分布均匀
三、分库分表需要解决的问题:
1、主键唯一性问题
2、分布式事务问题
3、SQL路由问题
4、结果归并问题
数据持续高速增长,读多写少,查询逻辑固定的场景下更合适分库分表。
注:阿里提出,尽量不要分库分表;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)