数据库查询引擎:推式 vs. 拉式

2025-04-16

本文探讨了数据库查询引擎中推式(push)和拉式(pull)两种模式的差异。拉式模式类似于迭代器模型,消费者驱动数据获取;而推式模式则由生产者驱动,数据主动推送给下游操作符。推式模式在处理DAG形查询计划(例如SQL中的WITH语句)方面更有效率,因为生产者可以将数据同时推送到多个下游操作符,避免了数据重复计算和不必要的缓冲。然而,拉式模式在处理某些算法(如merge join和LIMIT)时更方便。文章还讨论了缓存效率、代码简洁性以及两种模式在不同场景下的适用性,最终指出没有绝对的优劣之分,选择取决于具体需求。

阅读更多
开发 推拉模式

一种用于计数不同元素的迷人算法

2024-05-17

本文介绍了一种名为“Distinct Elements in Streams: An Algorithm for the (Text) Book”的论文中提出的计数不同元素的算法。该算法通过动态调整概率p来控制集合的大小,从而实现对不同元素数量的估计。文章首先介绍了传统的基于哈希表的精确计数方法,然后逐步推导出这种基于概率的近似算法。算法的核心思想是,当集合大小达到阈值时,将概率p减半,并对集合中的元素进行筛选,以确保每个元素都有p的概率被保留。最终,集合大小除以p即为不同元素数量的估计值。

阅读更多
未分类 计数