千万级别文章数据修改作者ID
场景:有两张表 文章表(5000万)、作者表
需求:更改文章中作者
问题:实际上innodb在进行update操作时,除了要记录日志,还要记录 undo信息,所以如果每次更新的数据量特别大,会导致 这另个文件的空间不够用,这个时候如果去扩展空间,就会要很长时间,在加上还有被阻塞的可能,所以问题还是比较复杂的
解决方式:增加关系关联表
举例:原有表结构
文章表
文章ID | 文章标题 | 作者ID |
1 | 标题一 | 1 |
2 | 标题二 | 1 |
3 | 标题三 | 2 |
4 | 标题四 | 2 |
5 | 标题五 | 3 |
6 | 标题六 | 3 |
作者表
作者ID | 作者名称 |
1 | 张三 |
2 | 李四 |
3 | 王五 |
这时小数据量更改 可以直接 upate 文章表 set 作者ID=目标作者ID where 条件;
但是如果更改数据量变大就不好用了
所以我们创建一个关系关联表
关系关联表
编号ID | 作者ID |
1 | 1 |
2 | 2 |
3 | 3 |
编号ID:如果是在线扩容可以将作者ID作为编号ID
文章表-作者ID:此时作者ID和关联表编号ID做对应关联
当需要修改文章作者时 可以修改 文章对应的编号ID 所对应的作者ID
好处:大大减少了mysql数据更改的条数 提升了处理效率 便于维护管理
2024-05-22:间接映射的策略通过引入一个中间表,间接管理需要频繁更新的字段,优化了数据库的更新操作,提高了系统的性能和可维护性。