MySQL 到 Elasticsearch 宽表构建
· 阅读需 8 分钟
简述
CloudCanal 2.0.X 版本近期支持了宽表构建能力,在数据预处理领域向前走了一步。
方案特点
- 相对灵活,对业务数据和结构贴合性好
- 能很好的支持事实表与维表打宽表需求
本文以 MySQL 到 Elasticsearch 单事实表双维表为案例,介绍 CloudCanal 宽表构建和同步的操作步骤。
技术点
打宽表的必要性
关系型数据库为了应对在线业务对于并发、毫秒级响应,同时操作相对趋向 kv 化,一般基于关系范式进行设计,通过外键或约定外键(非物理约束)进行关联。
当业务需求涉及到多张关联表(业务运营、报表、BI 需求),查询表的先后顺序成为操作响应时间的关键要素,但排列组合式种类随关联表数量(n)增加会膨胀非常快(n!),导致查询效率低下。
| 关联表数量 | 排列种类 |
|---|---|
| 2 | 2 |
| 3 | 6 |
| 4 | 24 |
| 5 | 120 |
| 6 | 720 |
| 7 | 5040 |
| 8 | 40320 |
| 9 | 362880 |
| 10 | 3628800 |
| 11 | 39916800 |
数据库或者数仓做 join 查询(特别是5张表以上),最难的事情变成了如何从这么多可能性中(搜索空间)找到最好的那一个。
