背景
- 将数百张数据结构相同的表(用Tn代表),合并至一张表(用C代表)
- T表数据量分布很不均衡,少至一位数,多至几十万
- T表间没有业务关联
- C表结构在T表结构的基础上增加了几个字段,无法使用INSERT INTO (SELECT * FROM)
- 数据总量约300万,经单进程测试,处理速度约500/s,预估耗时约100min
目标
最大化提升数据处理速度,将耗时降至10min左右,此时C表的写入速度约5000/s。
方案演进
方案一
因为T表间没有业务关联,所以每张表都可以单独处理。
将T表按数据量排序,每个进程处理N张表,尽量平衡各进程的负载。
存在的问题:
T表的数据量分布极为不均衡,有几张表数据量在70万左右,最终耗时约为(70万/500)s,瓶颈问题严重。
方案二
在 方案一 的的基础上,以 表+数据 的维度做并行处理,可以解决大表瓶颈问题。
存在的问题:
代码实现较复杂,需要考虑
- 每张T表的数据量
- 对大数据量的T表进行分割
- 避免数据重复处理
方案三
借助 Redis 的 pub/sub 机制,实现生产和消