
























1 namelosw 2021 年 3 月 31 日另外一个没用过,不过 GraphQL 里面常用的 Dataloader 的原理是本来 lazy load 的时候打到 Dataloader 上,记下 id 最后一次执行,本质上并不是直接解决 N + 1,而是把 N + 1 batch 起来,生成很大的 SELECT IN (1, 2, 3 ...)。 而最常见防止 N + 1 的方式就是关闭 Lazy load,然后手动 prefetch —— 效果是放在一条 join 里,比上面一种方法要高效,但是程序员的活多了。 我猜最理想的方式是用类似程序分析的形式把 N + 1 转化成 join 而非 batch,不过感觉好像并不是 non-trivial 的问题,即使能实现限制也很强。 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。