/note/tech

シングルバイナリなOLAP DBの次期版「DuckDB 2.0」プレビュー。クライアント/サーバ機能が安定版に...

要約:

■ 1. DuckDB 2.0プレビュー

  • 2026年秋リリース予定:
    • DuckDBの開発を主導するDuckDB Foundationがブログ「A Preview of DuckDB v2.0」を公開
    • 次期版DuckDB 2.0に搭載予定の新機能を紹介する内容
  • 大型の新機能が相次いで投入:
    • 別マシン上のDuckDBインスタンスに接続して操作するクライアント/サーバ対応
    • SQLパーサの全面刷新
    • JSON型の強化版ともいえるスキーマレスのVARIANT型
    • トリガー、非同期I/Oによる高速化
  • プレビュー版は「DuckDB Preview (Nightly) Installation – DuckDB」で公開

■ 2. DuckDBの基本的な特徴

  • シングルバイナリ実装:
    • SQLiteのようにシングルバイナリで実装されている
    • アプリケーションへの組み込みが容易で、ローカル環境にインストールして簡単に実行できる点が最大の特徴
  • 幅広いデータソース対応:
    • 単一ファイルとして扱える独自フォーマットのデータベースファイルに対応
    • MySQL、PostgreSQL、SQLiteデータベースの読み書きに対応
    • CSV、Parquet、JSON形式などのファイルの読み書きに対応
  • カラム型データベースエンジン:
    • 大規模データに対して非常に高速に抽出や分析が可能
    • 現在非常に注目されているデータベース

■ 3. クライアント/サーバ対応

  • Quackプロトコル:
    • 2026年5月に登場したクライアント/サーバ対応のためのプロトコル
    • 手もとのマシンのDuckDBから別マシンのDuckDBインスタンスに接続して操作できる
  • 従来の位置づけからの拡張:
    • DuckDBはPC上で特定のアプリケーションに組み込まれて実行されるOLAPデータベースとして登場した
  • マスターデータベース構成:
    • サーバとなるDuckDBインスタンスは複数クライアントからの接続を受け取って処理できる
    • 特定のインスタンスをマスターデータベースとし、多数のクライアントとなるDuckDBからアクセスして利用する構成が可能

■ 4. SQLパーサのPEGベース刷新

  • DuckSQLを維持しつつ全面刷新:
    • DuckDB独自のSQL方言であるDuckSQLは維持する
    • SQLパーサをPEG(Parsing Expression Grammar)ベースに全面刷新する
  • SQLパーサの役割:
    • SQL文をトークンに分解したあと解析を行う
    • 文法が正しいか、指定されたテーブルなどが存在するかを確認する
    • DuckDB内部で実行可能な処理にするため、内部のAST(抽象構文木)に変換する仕組みを備える
  • 従来のPostgreSQL由来パーサの課題:
    • DuckDBは登場以来、PostgreSQL由来のSQLパーサと文法を使用している
    • DuckDBの機能拡張に合わせて文法を拡張することが容易ではなかった
  • PEG採用の効果:
    • 文法の拡張が容易になる
    • 今後のDuckDBの進化がやりやすくなる

■ 5. VARIANT型

  • スキーマレスで効率的な新型:
    • スキーマレスで柔軟にデータを格納できるJSON型はDuckDB 1.5で採用された
    • DuckDB 2.0ではより強力なスキーマレス型のVARIANT型が採用される予定
  • JSON型との違い:
    • JSON型とは異なりテキスト形式で保存されない
    • 半構造化データの中から隠された共通構造を自動的に検出して切り刻んで保存する
  • 利点:
    • データが効率的に圧縮される
    • クエリも高速になる

■ 6. トリガー

  • 自動実行される処理:
    • あらかじめ特定の処理を定義しておくと、データの追加や更新、削除などの発生時にその処理が自動的に行われる
  • 用途:
    • 特定のテーブルの内容に変更があった場合、それをログとして別テーブルに記録する処理が可能
    • データの整合性の確認や監査、追跡が容易になる

■ 7. 非同期I/O

  • 従来の制約:
    • これまでもリードの並列処理は可能だった
    • その性能はDuckDB内の同期的な処理によって制約されていた
  • 2.0での改善:
    • 非同期I/O処理が実現し、クエリ処理とI/O処理が独立してスケールする
    • 特にリモートファイルの読み取りの並列性が大幅に向上
    • ネットワーク越しに置かれたAmazon S3などクラウドのオブジェクトストレージの読み込みが非常に高速になる