目前提供了 4 种方式的应用结构创建方式,同时OpenSearch-行业算法版提供了多表支持功能,以方便业务复杂场景下调用。
主辅表数据关联关系
通过手动创建应用结构方式,为应用创建多个表时,多表之间数据关联关系描述如下:
目前主辅表,数据关联仅支持 N:1 或 1:1 的关系,不支持 1:N(即多表数据关联关系中,多的一方只能是主表)。
主辅表需通过应用表外键与辅表主键进行数据关联,且表外键只能关联辅表主键。
最多只支持3层关联。辅表最多添加10张。
只能配置一张主表
主辅表关系 | 关联逻辑 | 是否支持 |
表A(主表)、表B | 表A(主表)-> 表B | 支持 |
表A(主表)、表B、表C | 表A(主表)-> 表B -> 表C | 支持 |
表A(主表)、表B、表C、表D | 表A(主表)-> 表B 表A(主表)-> 表C 表A(主表)-> 表Djoin层级不超过2层,辅表个数不超过10个 | 支持 |
表A(主表)、表B、表C、表D | 表A(主表)-> 表B -> 表C -> 表D超过2层多表数据关联 | 不支持(独享型可支持3层) |
表A(主表)、表B | 表A->表B,表B->表A环状多表数据关联 | 不支持 |
表A(主表)、表B、表C … 表K | 表A(主表)-> 表B 表A(主表)-> 表C .. 表A(主表)-> 表Kjoin层级不超过2层,但辅表个数超过10个 | 不支持(独享型可扩展辅表个数) |
数据模型
主辅表JOIN场景
注意事项
表字段结构一致才能映射,如辅表主键为INT,那么只能映射INT类型的主表字段。
离线表的join逻辑是,在索引构建的过程中将主表和附表left join成一张宽表来生成索引供用户查询,因此如果主表记录和辅表记录是N:1的关系,且N值比较大时,会在更新辅表时,触发放大n倍的主表更新流量,导致主辅表更新延迟,因此建议N值<=10。
主辅表left join后的宽表的行数和主表的行数一致,辅表没有数据的字段,会自动补充默认值,INT类型的默认值是0,STRING默认是null。
最佳实践:多表join引发的数据同步延迟