DuckDB--Pipeline
Published: Apr. 27, 2023
本文重点记录一下DuckDB中最重要的概念之一Pipeline,以及具体在代码中如何实现的。
本文重点记录一下DuckDB中最重要的概念之一Pipeline,以及具体在代码中如何实现的。
Reading notes about the paper “Query Suspend and Resume”.
DuckDB的Buffer Management的设计与实现参考了LeanStore[1],通过实现Pointer Swizzling
来尽可能的兼顾in-memory database的性能和更强的处理out-of-core场景的能力。
DuckDB中的Data Representation基本上由Val->Value->Vector->Data Chunk的结构实现。
NUMA[Non-Uniform Memory Access],非均匀内存访问架构,是指多处理器系统中,内存的访问时间受处理器和内存之间相对位置影响。在NUMA中,和处理器相近的内存,通常称作local memory[本地内存], 和处理器相对远的内存,通常称之为remote memory[远端内存]。
Buffer和Cache是现代操作系统中两个相似但截然不同的两个概念和机制,不过最近这两个机制有合并的趋势,比如在之前Ubuntu中输入free -h
可以看到buffer
和cache
是分开的,但是在较新的Ubuntu中,buffer和cache已经合并显示buff/cache
[至少在22.04是这样]。但是我们还是应该并且了解Buffer和Cache的异同。
Join[连接]是数据库查询最重要的操作,应该没有之一,主要用于连接两个以上的表并获得对应的结果。Join可以从类型和算法实现两个角度理解。