DuckDB
概要
DuckDB は、インプロセスで動作する分析(OLAP)向けの列指向データベース です。SQLite が「組み込みのトランザクション DB」であるのに対し、DuckDB は「組み込みの分析 DB」と位置づけられ、サーバーを立てずにアプリ内のライブラリとして高速な集計クエリを実行できます。単一マシン上でも大規模な分析処理をこなせる点が評価されています。
高速さの理由(Daily フィード)
記事「DuckDB Internals: Why Is DuckDB Fast?」が設計上の要点を解説しています。DuckDB_Internals_Why_Is_DuckDB_Fast
- インプロセス実行 — サーバーではなくライブラリとして動くため、ネットワーク越しのシリアライズ/デシリアライズが不要で、従来型 DB のプロトコルオーバーヘッドを排除する
- 列指向+圧縮 — データを列単位で保持し、必要な列だけ読む。行グループごとにゾーンマップ(最小・最大値)を持ち、条件に合わない行グループをスキップできる
- 物理最適化 — 最適化エンジンが約30個の小さな変換(フィルタプッシュダウン、サブクエリ非入れ子化、動的ジョイン最適化など)を順に適用する
- パイプライン並列処理 — クエリを複数パイプラインに分割し、各スレッドが独立したデータを処理して効率的に並列実行する
位置づけ
- PostgreSQL のような汎用 RDB が OLTP 寄りなのに対し、DuckDB は分析クエリに特化する(データモデリング の分析ワークロード)
- 列指向・ゾーンマップ・ベクトル化実行は、システムパフォーマンス の観点でも参考になる設計
- ストリーミングではなくバッチ/対話的分析が主戦場(ストリーミングデータベース と対照的)