数据库分库分表-水平分片与垂直分片

水平分片与垂直分片

垂直分片:

​ 按照业务维度将表拆到不同的数据库中,专库专用,分担数据库压力

​ 缺点:单表数据量大时,无法解决数据库访问慢的问题

水平分片:

​ 按照某种规则,将数据拆分到多张表中,理论上突破了数据量瓶颈

​ 缺点:可能导致数据存放不均匀面对如此散乱的分库分表之后的数据,应用开发工程师和数据库管理员对数据库的操作变得异常繁重就是其中的重要挑战之一。他们需要知道数据需要从哪个具体的数据库的分表中获取。能够正确的运行在单节点数据库中的SQL,在分片之后的数据库中并不一定能够正确运行。例如,分表导致表名称的修改,或者分页、排序、聚合分组等操作的不正确处理。跨库事务也是分布式的数据库集群要面对的棘手问题。

常见的分库分表产品: Sharding Sphere

如何设计数据分片方案

1、取模分片

​ id%10 = 1 --> database 1 分片键

​ id%10 = 2 --> database 2

​ 优点:数据存放比较均匀

​ 缺点:扩容需要大量的数据迁移

2、按照范围分片

​ 1月份 --> database 1

​ 2月份 --> database 2

​ 优点:扩容不需要数据迁移

​ 缺点:容易发生数据倾斜

3、根据业务场景,灵活制定分片策略

​ 整体按照范围分片,保证扩容时,数据不需要迁移;范围内按照取模分片,使数据分布均匀

分库分表需要解决的问题

​ 主键唯一性

​ 分布式事务

​ sql 路由

​ 结果归并

​ 表连接查询

为何要分库分表

阿里提出,尽量不要分库分表;数据文件大于2G,数据量大于500w

原因:给业务带来复杂性,与高内聚低耦合相悖

预估数据的趋势

订单持续高速增长

读多写少的场景 更合适分库分表

预估业务复杂度,sql 变化不大

分库分表与多数据源

关注点在数据源,可以用多数据源切换方案

分库分表,是对sql优化,改写,归并的一系列的解决方案,关注重点在sql语句。

多数据源切换方案分享

1、AbstractRoutingDataSource

2、dynamic-DataSource

总结:

分库分表是最为轻量级的解决方案,面临多种问题;分库分表改变方案时,需要进行大量的数据迁移,需要在实现之前,全面分析项目的业务场景,方案设计周全。

posted @ 2023-02-01 19:18  charler。  阅读(245)  评论(0编辑  收藏  举报