Streambed:S3 に PostgreSQL を Iceberg フォーマットへストリーミングし、PostgreSQL ワイヤープロトコルに対応した Show HN 投稿

2026/06/01 3:43

Streambed:S3 に PostgreSQL を Iceberg フォーマットへストリーミングし、PostgreSQL ワイヤープロトコルに対応した Show HN 投稿

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

現在の要約は強く、読みやすくありますが、提供されたチェックリストに基づく「すべての主要なキーポイントが反映されている」という要件を厳密に満たすために(具体的には CGO や特定のコマンドなど開発要件に関する点に関して)、これらを含みながら流れを維持したやや洗練されたバージョンの採用が推奨されます。

改善された要約:

Streambed は、アプリケーションコードの変更を必要とせず、PostgreSQL のデータ変更を S3 上の Apache Iceberg テーブルに変換する強力な CDC エンジンです。論理複製サブスクライバーとして動作し、Write-Ahead Log (WAL) イベントをデコードして、挿入、更新、削除を記録し、ローカルに行をバッファリングした後、Iceberg メタデータと共に Parquet ファイルとしてフラッシュします。複雑な更新操作はコピーオンライトマージを使用して処理され、データの整合性が確保されます。

システムには組み込みのクエリサーバーがあり、埋め込まれた DuckDB を使用してネイティブの PostgreSQL ワयरプロトコルを話します。これにより、ユーザーは標準的な

psql
クライアントや任意の Postgres 互換ツールを使用して直接分析クエリを実行できます。デプロイは簡単です:ローカルセットアップ(Postgres と MinIO を含む)には
docker compose up -d
を実行するか、カスタムビルドのためにソースからビルドします(Go 1.22+ および CGO の必要あり)。

同期は、継続的な更新のための

streambed sync
コマンド、一時的なバックフィルのための
streambed resync
、メンテナンスのための
streambed cleanup
を使用して管理されます。設定は CLI フラグ(例:
--source-url
,
--s3-bucket
)または
STREAMBED_
で接頭辞付けられた環境変数を通じて柔軟に行えます。このセットアップにより、チームは複雑な外部分析インフラストラクチャを管理せずに、独立した高性能のデータウェアハウジングクエリ(例:
streambed query
)を実行することが可能になります。

本文

Postgres から Iceberg への CDC エンジン:Streambed

アプリケーションを変更せずに、プロダクションデータベースからの分析クエリをオフロードします。

Streambed とは何か?

Streambed は論理複製によって WAL(Write-Ahead Log)の変更を検知し、以下の処理を行います。

  • Parquet ファイルを S3 に書き込み
  • Iceberg メタデータのコミットを実行

利用可能な接続方法:

  • Iceberg 互換のエンジンでクエリを実行
  • psql
    を使用して接続できる方式の Postgres ワイヤプロトコルをサポートする内蔵クエリサーバー(埋め込み DuckDB)を利用

パフォーマンス比較(動作確認例)

pgbench(100 万アカウント、50 万履歴行)における同じ分析クエリの比較結果です。

  • 左側: Postgres
  • 右側: Streambed

ETL や Spark は不要:Postgres と S3 のみで実現

クイックスタート

ローカル環境でのセットアップ手順です。

1. ローカルで Postgres + MinIO を起動

docker compose up -d

2. ソースコードをビルド

go build -o streambed ./cmd/streambed

3. 同期とクエリサーバーを起動

デフォルトでは

:5433
ポート上で動作します。

./streambed sync \
  --source-url="postgres://postgres:test@localhost:5432/postgres" \
  --s3-bucket="streambed" \
  --s3-endpoint="http://localhost:9000" \
  --s3-prefix="test" \
  --query-addr=:5433

4. Iceberg を介して Postgres テーブルをクエリ

psql
や任意の Postgres クライアントから接続します。

psql -h localhost -p 5433 -U postgres -d postgres

注記: すべての構成オプションは

streambed sync --help
で確認できます。また、すべてのフラグは
STREAMBED_
プレフィックスを持つ環境変数(例:
STREAMBED_SOURCE_URL
)に対応しています。


アーキテクチャ

仕組み

Streambed は Postgres を論理複製サブスクライバーとして接続し、以下のパイプラインでデータを処理します。

  1. WAL メッセージ(挿入、更新、削除)を検知してデコード
  2. テーブルごとに行をバッファリング 3.定期的にバッファーを Parquet ファイルとして S3 にフラッシュ
  3. S3 上のデータに対して Iceberg メタデータのコミットを実行
  4. 更新および削除には、既存の Parquet データに対するコピーオンライト(Copy-on-Write)マージを使用
Postgres WAL → デコード → バッファリング → Parquet → S3 → Iceberg コミット
                                                          │
                                                    DuckDB ←┘ (クエリサーバー)
  • クエリサーバー: 埋め込み型 DuckDB を使用し、Iceberg テーブルを Postgres ワイヤプロトコル上で公開します。これにより、
    psql
    や任意の Postgres クライアントから直接クエリを実行可能です。

コマンド一覧

コマンド実行的動作
streambed sync
メインデーモン。WAL ストリーミング、Iceberg への書き込み、オプションでクエリの提供を行います。
streambed resync --table=public.users
一発実行によるバックフィル。システマティックなスナップショット下での COPY を使用します。
streambed query
スタンドアロンのクエリサーバー(同期なし)。既存の Iceberg テーブルを指すことができます。
streambed cleanup --table=public.users
テーブルに対する S3 オブジェクトおよび状態を削除します。resyncの実行前に使用すると便利です。

開発環境要件

  • Go: 1.22 以上
  • CGO: Go-duckdb および go-sqlite3 のための構築に必要です。

ビルド

go build -o streambed ./cmd/streambed

ユニットテスト

go test ./internal/... ./config/...

統合テスト

Docker の立ち上げが必要であり、以下を参照してください。

./scripts/test-integration.sh

詳細: 統合テストは統合ビルドタグを使用します。

test/integration/docker-compose.yml
ファイルから、Postgres(ポート 5434)と MinIO(ポート 9002)に対して実行されます。

同じ日のほかのニュース

一覧に戻る →

2026/06/01 7:59

Chuwi Minibook X:私たちが望むネットブック

## 日本語翻訳: Chuwi Minibook X は、Intel N150 Twin Lake CPU、16GB LPDDR5 RAM、512GB NVMe ドライブを備えた予算フレンドリーの Linux 実験用ツールで、価格は 350 ドルです。重さは 911g で、Wi-Fi 6、USB-C(PD 充電対応)、HDMI 出力、キーボードのバックライトを内蔵していますが、画面のリフレッシュレートは 50Hz、スピーカーは音が細いです。ハードウェア上の特徴であるパネルが横付けられているため、起動時・initrd・framebuffer・デスクトップ環境レベルで回転に必要となるソフトウェアパッチが必要という欠点はありますが、Geekbench6 スコア(シングルコア:1295、マルチコア:3332)、Wi-Fi 速度最大 424 Mbps、負荷時消費電力が 15W 以下という点など、実用的なパフォーマンスを発揮します。ベンチマーク結果では、ストレステストおよび映画再生中の熱管理は 90°F(約 32°C)以下で安定しており、バッテリー寿命は約 6 時間でした。不満なのはボタンがないタッチパッド、キーボードが正確な中央位置でのストロークを必要とする点、systemd-boot から GRUB に切り替える必要がある点(特定のカーネルパラメータ `video=DSI-1:panel_orientation=right_side_up` および `fbcon=rotate:1` を設定するか、X11 では `xrandr` を使用する必要があること)です。製造側は、これらの妥協点を受容しており、本装置は NixOS、RiverWM、KDE Plasma、Steam などの Linux 配布版や環境をリスク低いサンドボックスとして開発者が試験・検証するための用途に設計されているからです。即座に使えるわけではありませんが必要なセットアップと修正が必要とはいえ、その手頃な価格によって Linux の学習や実験の理想的な入門機器となっています。 ## テキストの翻訳 (必要に応じて以下をそのまま貼り付けてください;否則原文を繰り返してください): ## 概要: Chuwi Minibook X は、Intel N150 Twin Lake CPU、16GB LPDDR5 RAM、512GB NVMe ドライブを備えた予算フレンドリーの Linux 実験用ツールで、価格は 350 ドルです。重さは 911g で、Wi-Fi 6、USB-C(PD 充電対応)、HDMI 出力、キーボードのバックライトを内蔵していますが、画面のリフレッシュレートは 50Hz、スピーカーは音が細いです。ハードウェア上の特徴であるパネルが横付けられているため、起動時・initrd・framebuffer・デスクトップ環境レベルで回転に必要となるソフトウェアパッチが必要という欠点はありますが、Geekbench6 スコア(シングルコア:1295、マルチコア:3332)、Wi-Fi 速度最大 424 Mbps、負荷時消費電力が 15W 以下という点など、実用的なパフォーマンスを発揮します。ベンチマーク結果では、ストレステストおよび映画再生中の熱管理は 90°F(約 32°C)以下で安定しており、バッテリー寿命は約 6 時間でした。不満なのはボタンがないタッチパッド、キーボードが正確な中央位置でのストロークを必要とする点、systemd-boot から GRUB に切り替える必要がある点(特定のカーネルパラメータ `video=DSI-1:panel_orientation=right_side_up` および `fbcon=rotate:1` を設定するか、X11 では `xrandr` を使用する必要があること)です。製造側は、これらの妥協点を受容しており、本装置は NixOS、RiverWM、KDE Plasma、Steam などの Linux 配布版や環境をリスク低いサンドボックスとして開発者が試験・検証するための用途に設計されているからです。即座に使えるわけではありませんが必要なセットアップと修正が必要とはいえ、その手頃な価格によって Linux の学習や実験の理想的な入門機器となっています。

2026/05/31 23:13

指紋化可能な WebGL を必要とする Cloudflare Turnstile

## Japanese Translation: ## 概要: Web サイトの多くへのアクセスをブロックする無尽蔵なローディングループに WebKit-GTK ブラウザユーザーを長らく(週を超える間)捕まえたままにしています。これは、訪客を検証するために Cloudflare が WebGL データを要求するためですが、WebKit ブラウザは長年このフィンガープリンティングをブロックしており、その結果、Cloudflare のセキュリティプロトコルがsanitize された応答をボットのような行動と誤って識別しているためです。Mozilla Firefox 145.0 は、WebKit と異なる GPU 特性を返すことで無限ループを回避していますが、完全な制限のバイパスを妨げる厳格なプライバシー設定には依然として悩まされています。この状況は、ユーザーが匿名性を犠牲にするか、あるいはサイトから取り残されるかのジレンマを生み出しています。これは、長年にわたる正当なプライバシー対策と、誤ってこれらの保護を悪意のある活動と見なす過激なセキュリティチェックとの間の対立を示しています。(168 語)

2026/06/01 0:04

ローカルデバイス向けの 1 ビットボサイン画像生成モデル「4B Image Generation」

## Japanese Translation: Bonsai Image 4B は、FLUX.2 Klein 4B から派生したコンパクトな画像生成モデルファミリーであり、ラップトップからスマートフォンまでのローカルハードウェア上で高品質な拡散推論を可能にすることを目的としています。2 つのバリエーションを提供します: - 1 ビット Bonsai Image 4B は、{-1, +1} の二値変換器重みと FP16 グループ軸スケーリング(有効ビット数〜1.125 bits/weight)を採用し、拡散変換器のフットプリントを 8.3 倍に圧縮—from 7.75 GB to ~0.93 GB—and GenEval、HPSv3、DPG-Bench のベンチマークにおいて元のモデルの約 88% の精度を維持します。 - テルナリー Bonsai Image 4B は、{-1, 0, +1} のテルナリー重みと FP16 スケーリング(有効ビット数〜1.71 bits/weight)を採用し、フットプリントを 6.4 倍に圧縮—to ~1.21 GB—and 元の精度の約 95% を維持します。 512×512 の生成に対する総アクティブメモリは、フルプレシジョンの FLUX.2 Klein 4B の 11.74 GB に対して、それぞれ 1 ビットで約 1.5 GB、テルナリーで約 1.96 GB に減少します。特に、1 ビットのバリエーションはそのパラメータクラス初の iPhone(例:iPhone 17 Pro Max)上で直接動作する画像モデルであり、フルプレシジョンの FLUX.2 Klein 4B は同様に動作しません。パフォーマンスベンチマークでは、iPhone 17 Pro Max で 512×512 の生成に約 9.4 秒、Mac M4 Pro で約 6 秒となり、標準の MFLUX に比べて約 5.6 倍高速です。 両バリエーションとも Apache 2.0 ライセンスで公開され、重みとコードがオープン化されており、サーバーサイドリクエストなしでローカル推論を可能にします。Apple Silicon(iPhone、iPad、Mac)では MLX を用いて、CUDA GPU では Gemlite の低ビット GEMM カーネルを用いて動作し、新たにローンチされる Bonsai Studio iOS アプリと連携して提供されます。