ピン留めされたアイテム

モチベーション
- Postgres は OLTP として利用したい
- DuckDB は OLAP として利用したい
- 集計を Postgres でやらず、独立した DuckDB でやりたい
- データ保存は S3 を利用したい
- 保存先として一番安い
- 一定期間経ったら削除が簡単にできる
- 細かいデータ処理は DuckDB-Wasm を利用してクライアント側のリソースを利用したい
- 一度前処理したデータは S3 に Parquet 形式で置いておきたい
- 転送量ボトルネックに寄せる
- Cloudflare R2 などを利用すれば転送量はかからなくなる
- 転送量ボトルネックに寄せる

概要
- DuckDB は Postgres に直接アクセスできる仕組みを持っている
- Postgres のテーブルを DuckDB に持ってこれる
- COPY でテーブルを Parquet ファイルにすることができる
- Parquet ファイルを S3 にアップロードすることができる
ここまでを全て DuckDB 単体で実現できる。
go-duckdb と組み合わせる
marcboeker/go-duckdb: go-duckdb provides a database/sql driver for the DuckDB database engine.
Go の DuckDB と組み合わせることで、Go で HTTP リクエストを受け取り、DuckDB で処理をして Parquet 用の Presigned URL を返すという処理が実装できる。
Go から S3 API を触るときはminio/minio-go: MinIO Go client SDK for S3 compatible object storage がとてもオススメ。

DuckDB-Wasm との組み合わせ
- Postgres から取得したデータを DuckDB で整理して、Parquet 化し、S3 へアップロードする
- S3 へアップロードした Parquet ファイルを Presiguned URL にしてブラウザへ取得させる
- ブラウザは取得した Parquet ファイルを DuckDB-Wasm に regiserFileBuffer で登録する
- DuckDB-Wasm でやりたい放題