分库分表实战
分库分表会遇得到哪些问题,这些问题该如何解决,整体设计是什么。
描述业务场景:
试想在一个电商系统中存在订单表,系统在初始运行期间,一般使用单库和单表的方式来存储和访问数据。因为数据量不大,所以数据库访问的瓶颈并不明显。
随着业务的演进,当需要支撑大规模电商业务时,系统每天可能会生成数十万甚至上百万级别的订单数据,订单表的访问就会开始出现瓶颈。
以互联网系统中常用的 MySQL 数据库为例,虽然单表存储的数据原则上可以达到亿条级别,但此时访问性能会变得很差,即使采用各种调优策略,效果也通常微乎其微。业界普遍认为,MySQL 单表容量在 1 千万以下是一种最佳状态,一旦超过这个量级,就需要考虑采用其他方案了。
既然以 MySQL 为代表的关系型数据库中的单表无法支持大数据量的存储和访问方案,自然而然的,你可能会想到是否可以采用诸如 MongoDB 等 NoSQL 的方式来管理数据?
现在需要对订单表进行分库分表操作:
1、分库还是分表,还是分库分表都做。
2、垂直分还是水平分。
3、选择哪个字段。
一般选择user_id,或者create_time字段。
1、ID策略:
UUID、雪花算法,或者交叉
2、分页,连表该如何操作。
文章:分库分页方案
所谓的二次查询,第一步的目的是为了找到最小值,第二步是为了找到全局数据。
求最小值:一页只有5条数据,查询第200页的数据,数据分布在3个库里,每个库提供333 + 5的数据
select * from T order by time offset 333 limit 5
select * from T order by time offset 333 limit 5
select * from T order by time offset 333 limit 5
一共获取了15条数据,这15条数据里一定包含最小值,为什么?
因为三条sql语句里,一定至少包含一个分页里的数据。
sharding-jdbc的原理将所有表的数据前5条数据获取,然后再进行排序,获取到前5条。
3、是否需要事务。
根据业务需求,必须本地支持事务才可以。
4、数据如何迁移。
主动迁移:写一个程序,遍历数据将数据迁移到目标表里。
被动迁移:在业务代码里加入迁移逻辑。
文章:不停机分库分表数据迁移
5、如何落地。
文章:如何让分库分表落地
6、数据倾斜
数据倾斜一般是因为字段选择不合适造成的,建议选择user_id
7、其他
文章:分库分表遇到的一些问题
上一篇:无
下一篇:造成数据倾斜的原因以及解决方案
相关文章
-
造成数据倾斜的原因以及解决方案
一、造成数据倾斜的原因 1、数据分布不均匀 某些键值或者分区的数据量远大于其他,导致部分节点负载过重。
NEW个对象 2025-07-28
-
分库分表实战
分库分表会遇得到哪些问题,这些问题该如何解决,整体设计是什么。
NEW个对象 2024-10-03