iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0
AI/ ML & Data

粗暴的資料處理 DuckDB系列 第 29

Day29 -- Why DuckDB is fast ?

  • 分享至 

  • xImage
  •  

整個系列介紹了,DuckDB 簡單易用的面向,但最後一天我們可以談談很多人嘗試 DuckDB 的原因

快速的 SQL 處理

why-fast

DuckDB 發源於 CWI(Centrum Wiskunde & Informatica)是荷蘭的國家數學與計算機科學研究所(可以想成是荷蘭的中研院),具有豐富的資料庫研究歷史。

CWI 於 1980 年代開始資料庫相關研究,最著名的是 MonetDB,這是 Columnar Database 的先驅,專注於高效的查詢處理。MonetDB 的技術和思想後來影響了多個現代資料庫系統,包括 Vectorwise 和 DuckDB。CWI 的研究團隊長期專注於創新資料庫技術,尤其是在 OLAP、查詢優化和高效處理大數據等領域。

簡單來說就是家學淵源,BTW Python 也是 Guido van Rossum 在 CWI 發明的喔 !

不為人知的事情是,DuckDB 其實有一個兄弟專案,叫做 MonetDBLite,可惜因為,MonetDB 的 codebase 不是專為 embedding query engine 設計的,所以他們決定真的從頭開始寫一個 SQLite for analytic

DuckDB 真正快速的秘訣大蓋有四大類。

  1. 向量化處理(Vectorized Execution)
    DuckDB 使用向量化處理方式,能夠批量處理數據,減少了 CPU 的上下文切換成本,顯著提升了計算效能。
    可以想成充份利用 SIMD (或者說 auto vectorization 更精確)

  2. 緊密存儲格式(Columnar Storage Format)
    DuckDB 採用列式存儲,這使得針對特定欄位的查詢或聚合運算更高效,因為只需讀取相關的數據欄位。
    一種類似 Apache Parquet 的檔案格式,加入更多 lightweight 壓縮算法。

  3. 內存優化(In-Memory Execution)
    DuckDB 的架構設計使其能有效利用內存進行處理,大多數 OLAP 查詢可直接在內存中完成,降低了磁碟 I/O 的瓶頸。
    一種類似 Apache Arrow 的 memory 格式。

  4. 自動並行化(Automatic Parallelization)
    DuckDB 可以自動將查詢分散到多個 CPU 核心進行並行處理,充分發揮多核處理器的性能。
    Morsel-Driven Parallelism

除此之外,DuckDB 實作了非常多這 10 年在 database 研究上,最先進的演算法

  • Secondary indexes: DuckDB has support for secondary indexes based on the paper The Adaptive Radix Tree: ARTful Indexing for Main-Memory Databases by Viktor Leis, Alfons Kemper and Thomas Neumann.

  • SQL window functions: DuckDB's window functions implementation uses Segment Tree Aggregation as described in the paper Efficient Processing of Window Functions in Analytical SQL Queries by Viktor Leis, Kan Kundhikanjana, Alfons Kemper and Thomas Neumann.

  • SQL inequality joins: DuckDB's inequality join implementation uses the IEJoin algorithm as described in the paper Lightning Fast and Space Efficient Inequality Joins Zuhair Khayyat, William Lucia, Meghna Singh, Mourad Ouzzani, Paolo Papotti, Jorge-Arnulfo Quiané-Ruiz, Nan Tang and Panos Kalnis.

可以說是想學習 modern OLAP 最好閱讀的 codebase 了!


上一篇
Day28 -- DuckDB Style SQL (22) ?
下一篇
Day30 -- Duckest Hour
系列文
粗暴的資料處理 DuckDB30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言