查询引擎:推Push与拉Pull
💡
原文中文,约3100字,阅读约需8分钟。
📝
内容提要
本文讨论了推式和拉式查询引擎的区别。推式查询引擎主动传递数据给下游操作符,拉式查询引擎则是消费者主动请求数据。推式查询引擎能高效处理有向无环图(DAG)的查询计划,并提高缓存效率。拉式查询引擎需要等待数据请求才能工作。推式系统能让Snowflake高效处理DAG计划,而拉式系统不支持。推式系统通过移除控制流逻辑提高缓存效率。在基于推送的系统中,操作者处于闲置状态,直到有人告诉它有一行数据。基于拉动的系统中,操作者一直处于闲置状态,直到有人向他们索要数据行。推式系统能够处理DAG计划以及共享和流水线中间结果。
🎯
关键要点
- 推式查询引擎主动传递数据,拉式查询引擎由消费者请求数据。
- 推式查询引擎高效处理有向无环图(DAG)查询计划,提高缓存效率。
- 推式系统通过移除控制流逻辑来提升缓存效率。
- 拉式系统中,操作者闲置,直到有人请求数据行。
- 推式系统与消费者的工作脱钩,系统在有人通知时才工作。
- 推式系统能高效处理DAG计划,支持共享和流水线中间结果。
- 拉式系统在调度和生命周期管理上面临挑战,尤其是多个输出的情况下。
- 推式系统的调度与输出无关,减少了复杂性。
- 推式系统在处理记录时,消费者掌握记录的所有权。
- 推式查询编译成机器代码更简单,有助于提高缓存效率。
- 从拉式到推式的转换需要轮询状态,存在一定成本。
- 某些算法不适合在推式系统中使用,如合并连接算法和LIMIT运算符。
- 推式模型在处理循环图时面临挑战,但有系统如Naiad能有效解决。
- 现代分析系统开始探索推送模型,尽管比较困难,但各模型适用于不同场景。
➡️