Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DuckDBを使ったシンプルで安価なデータマネジメント

Naoyuki Yamada
December 10, 2024
2.8k

 DuckDBを使ったシンプルで安価なデータマネジメント

Naoyuki Yamada

December 10, 2024
Tweet

Transcript

  1. 山田直行(やまだ なおゆき)
 - ナイルワークス ドローン開発部
 自動航行ドローンのサーバー・ネットワーク・データベースなどバックエンド全般の 開発・運用
 - サイバーエージェント AI

    Lab 経済学社会実装チーム リサーチエンジニア
 研究成果のアプリケーション開発
 X: @satully
 HP: https://www.kirishikistudios.com/
 発表者

  2. 要件
 - 時系列のIoTデータ
 - スキーマは単一でなく、たくさんある(Heartbeat, 位置情報, 姿勢, GNSS(衛星)情報, バッテリー, etc…)


    - ニアリアルタイムで保存し、数秒以内にはフロントエンドのウェブアプリからクエリで きる状態にする
 - 前後のレコードを比較して監視・検知してSlackにアラートを飛ばす
 - 過去データもフロントエンドのウェブアプリからクエリできる状態を保つ
 - アドホックな分析クエリも投げることがある(頻繁ではない)
 - ファイルベースのログとかRDBとも接続してJOINして分析したい
 - エンジニアは一人(サーバーサイド全般+データ系をまるっと担当)

  3. 
 
 
 1年半前のAWS Summit Tokyoミニステージ登壇時の資料
 ナイルワークスの自動飛行ドローンを支えるバックエンドシステム https://www.nileworks.co.jp/news/20230425
 当時は過去データの分析はS3 +

    Athenaでやっていたが、いろいろ面倒だった
 
 フォロー記事: 時系列+もう一つの何らかの属性で検索することがほとんどのデータは、 S3に置いてs3 selectが有用 - road288の日記 https://road288.hatenablog.com/entry/2024/02/06/151320
 

  4. DuckDBの簡単な紹介
 - https://duckdb.org/
 - データ分析に便利なインプロセスのデータベース
 - SQLiteのOLAP版 + 便利機能をいろいろ追加したもの
 -

    各種データソースへの接続が簡単、速い
 - スキーマを事前に定義しなくてもクエリできる 
 - CSV, JSON, Parquet, Excelなどのファイル 
 - PostgreSQL/MySQLなどのリレーショナルDBと接続できる(federationぽいもの) 
 - S3に置いたファイル群を直接クエリできる 
 - パターンに一致した複数ファイルをマルチスレッドで読み込める 
 - DeltaLake/Icebergにも対応(個人的には現時点だと不十分) 
 - Python, Rustなどの言語のSDK, WASMでの利用に対応

  5. DuckDB導入後のアーキテクチャ
 - リアルタイム(~当日)のデータクエリはPostgreSQL(Aurora)
 - PostgreSQLに書き込むのと並行してKinesis Stream〜Firehose~S3に置き、過去分 データはDuckDBからクエリ
 - Firehoseを使わずとも、直接Kinesis Stream~LambdaでDuckDBに書き込んでそこから

    Paquet書き出しできないか試行錯誤中 
 - シングルスレッドでしか書き込めないがappenderが十分高速なら可能と思っている 
 - FIrehoseでParquetにするにはGlueでスキーマ定義が必要なのが面倒なのでそれをカットした い
 - 今後はIceberg(S3 Tables)も使っていきたい

  6. - 必要なデータだけ抽出してローカルに持ってきてしまえば、「なんか適当に操作した らまずいかも」の懸念が無いので、思いっきりいじれる
 - パフォーマンス影響・課金影響の2軸 
 - 「サーバーに負荷かけるような重いクエリ発行しないでくださいね〜」みたいな注意 添えられて権限もらっても、ライトユーザーは困ってしまう
 -

    SaaSだと、テーブル全体をスキャンするクエリを実行しちゃうとけっこう課金されちゃ うのもありがち
 - DuckDB-Wasm + 生成AI on Next.js で、どなたでも、いますぐ、地理空間情報の分 析ができましてよ
 - 「サンドボックス化されたデータベース」という表現が良い 
 
 サーバーに負荷かけちゃう懸念が無い

  7. S3 + 標準SQL + αの知識で扱えて学習コストが低い
 - S3のオブジェクトは厳密には「ファイル」ではないが、実質的にファイルのような概 念で扱える。データの実体が見えるので、これが敷居が低い
 - SQLを使える人は多い


    - +αの知識についても直感的なものが多い
 
 - AWSは周辺のサービスを使っていくと高い
 - firehose, glue, athena, cloudwatch… 地味にコストがかさむ 
 - S3とLambdaはAWSの特売品

  8. - DuckDBを業務の中でうまく組み込めるポイントがあったという事例紹介 
 - DuckDB単体で全部できるという話ではなく、PostgreSQLと組み合わせてつかっている 
 - BigQueryとかSnowflakeなどと排他的な関係ではなく補完できるツール 
 -

    DuckDBはコンピューティングとストレージのうち、コンピューティングを一部担うイメージ。スト レージはデータ形式はParquet、フォーマットはIceberg/DeltaLakeとかが今後は有望だと思う 
 - 中小規模のサービスのデータマネジメントを想定 
 - 目安としてDBテーブル数億レコード以下、DBストレージ数百GB、S3ストレージ数TB以内 
 - 顧客単位の分析とか範囲を絞った用途なら大規模でも使える局面はあるはず 
 
 - ファイルベース・クライアントベースの世界はいろいろシンプルになる! 
 今日の発表の前提・要点・まとめ