在高性能系统的要求下,复杂的系统当单表数据量增加到几千万甚至上亿条记录时,查询延迟无疑是影响高性能系统的瓶颈。业内提供的解决的方案是分库分表,冷热数据分离。
一、分库分表:
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、结果归并问题
数据持续高速增长,读多写少,查询逻辑固定的场景下更合适分库分表。
注:阿里提出,尽量不要分库分表;
标签:分库,database,--,分片,分表,基础理论,数据 From: https://www.cnblogs.com/Iven-L/p/17284940.html