首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MySQL如何在线扩展表结构,内核原理??(第27讲)

MySQL如何在线扩展表结构,内核原理??(第27讲)

作者头像
架构师之路
发布2024-12-25 14:31:44
发布2024-12-25 14:31:44
2100
举报
文章被收录于专栏:架构师之路架构师之路

《架构师之路:架构设计中的100个知识点》 27.MySQL在线扩展表结构

一个海量数据高并发的业务场景,产品经理前期没想清楚,现在想要增加业务属性,MySQL要扩展表结构,有什么办法吗?

方案一:alter table add column,行不行?

不可行,海量数据高并发情况下会锁表。

通过增加表的方式扩展,通过外键join来查询,行不行?

不可行,外键影响性能,连表影响性能,海量数据高并发情况下不行。

通过增加表的方式扩展,通过视图来查询,行不行?

不可行,视图影响性能,海量数据高并发情况下不行。

揍产品经理,避免需求变更,行不行?

不可行,打赢坐牢,打输住院。

提前预留一些reserved字段,以备扩展,行不行?

可行。但如果预留过多,会造成空间浪费,预留过少,不一定达得到扩展效果。

MySQL的online-schema-change,在线扩展字段,行不行?

可行。且这是标配。

MySQL的online-schema-change的原理是怎么样的?如何能在海量数据高并发的场景下,平滑扩展字段呢?

假设原表为:user(id, name)

希望扩展字段升级为:user(id, name, age)

第一步,创建新表,user_new(id, name, age),也就是扩展字段后的表;

第二步,创建触发器,对原表user进行的所有写操作insert/delete/update,对新表进行相同的操作;

第三步,逐步迁移数据,分批限速将user表中的数据库,迁移到user_new表;

第四步,删掉触发器,移走原表;

第五步,将新表user_new重命名rename为原表user,字段扩展完成;

整个过程不需要加大锁,可以持续对外提供服务。

MySQL的online-schema-change有什么注意事项吗?

有三点要注意:

其一,被迁移的表要求有主键,这个条件一般都满足;

其二,扩展过程中要建立触发器,原表如果已经有很多触发器,方案就不行,但互联网海量数据高并发的场景下,一般都不允许业务触发器;

其三,由于触发器的建立,会影响原表性能,因此这个操作最好在流量低峰期进行

pt-online-schema-change是互联网MySQL-DBA必备的利器,在互联网公司使用广泛。

知其然,知其所以然。

思路比结论更重要。

补充阅读材料:

《pt-online-schema-change介绍》

https://docs.percona.com/percona-toolkit/pt-online-schema-change.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档