本日、WalShadow を発表します。物理 WAL から直接 Postgres のデータを ClickHouse にレプリケーションするオープンソースエンジンです。
ベンチマークでは、Postgres でコミットされたトランザクションが ClickHouse で読めるようになるまで約 200 ms でした。WalShadow は毎秒 289,000 行のスループットを維持し、ソースの Postgres インスタンスにほぼ追随しました。
従来の CDC ベースのシステムと違い、WalShadow は Postgres の論理レプリケーションを使いません。読み取るのは、Postgres のレプリカが使う物理 WAL ストリームそのものです。これをソースデータベースの外側でデコードし、ネイティブ形式のブロックとして ClickHouse に直接書き込みます。その結果できあがるレプリケーションアーキテクチャは、レイテンシーとスループットが Postgres の物理スタンバイに迫り、それでいてデータを ClickHouse ですぐに分析できます。
WalShadow は、初期ロード、継続的なレプリケーション、スキーマ変更への追従、再起動後のリカバリー、計画的なソースの切り替えまで、レプリケーションのライフサイクル全体に対応します。
物理 WAL を直接読み取るため、WalShadow に論理レプリケーションのスロットは必要ありません。その方式に伴う運用上の負担も、多くがなくなります。ソース側の Postgres インスタンスが消費するリソースも大幅に減ります。また、ADD COLUMN、RENAME COLUMN、DROP COLUMN、CREATE TABLE といった複雑なスキーマ変更にも対応します。
WalShadow は完全なオープンソースで、本日から GitHub で利用できます。
ClickHouse Managed Postgres への WalShadow の提供
フルマネージドで使いたい方のために、ClickHouse Managed Postgres 向けの WalShadow もプライベートプレビューとして提供を開始します。
物理 WAL は WalShadow のアーキテクチャの要ですが、ほとんどのマネージド Postgres サービスはこれをユーザーに公開していないため、ユーザーは WalShadow を使えません。ClickHouse Managed Postgres は Postgres と ClickHouse の両方を管理しているため、WalShadow を Postgres のレプリケーション層に直接組み込み、Postgres の WAL から ClickHouse までネイティブな経路を提供できます。
ClickHouse Managed Postgres での WalShadow のプライベートプレビューにお申し込みください。
アーキテクチャ: 物理 WAL から ClickHouse ネイティブブロックまで

WalShadow は Postgres から ClickHouse へのレプリケーションに新しいアプローチを取り、ClickHouse を事実上、分析用の物理スタンバイに変えます。
WalShadow が読み取るのは、Postgres が物理レプリケーションとリカバリーのために生成する WAL ストリームそのものです。変更を論理イベントにデコードする処理をソースデータベースに任せるのではなく、ソースの外側で次の 4 段階に分けて WAL を処理します。
- 稼働中のスキーマを追跡する。 WalShadow はカタログの WAL レコードを絞り込み、スキーマだけを持つシャドウ Postgres インスタンスに再適用します。これにより、テーブル・カラム・Postgres の型といったカタログ情報を、ソースのスキーマが変化しても最新の状態に保ちます。
- データ変更を並列にデコードする。 WalShadow はヒープレコードを、シャドウ Postgres インスタンスを経由させずに Rust 製デコーダーのプールへ分散します。
- ClickHouse ネイティブブロックを構築する。 バッチャーがデコード済みの行をテーブル単位でまとめ、完全な ClickHouse ネイティブブロックにします。中間形式への変換を挟まないため、データの忠実性が保たれます。
- 並列に挿入する。 別のインサーターのプールが複数のブロックを ClickHouse へ同時に書き込むため、デコードと挿入をそれぞれ独立にスケールできます。
これにより、Postgres から ClickHouse への直接の経路ができます。論理デコード用の出力プラグインも Kafka も不要で、JSON へのシリアライズや正規化のための別工程も必要ありません。
WalShadow はブロックを並列に処理するため、ブロックが ClickHouse に到着する順序は入れ替わることがあります。WalShadow は各行にソースの WAL 位置 (_lsn) を付けて正しさを保ちます。ClickHouse はこれをもとに、キーごとに最新バージョンを保持できます。スキーマ変更やテーブルの切り捨てのように厳密な順序が必要な操作にはバリアを設け、先行するすべてのデータが永続化されるまで待ってから適用します。
ソース側は物理 WAL を送るだけでよく、負荷の特性は物理スタンバイと同程度になります。それでいて、変更は 1 秒以内に ClickHouse へ届きます。
アーキテクチャの全体像について詳しくは、アーキテクチャドキュメント を参照してください。性能と機能に影響するさまざまなチューニング設定については、設定ガイド を参照してください。
性能ベンチマーク
私たちは WalShadow を PeerDB と比較してベンチマークしました。PeerDB は、Postgres から ClickHouse への CDC を担う最先端のツールです。論理レプリケーションを利用しており、ClickPipes を支えています。
この比較には少し複雑な思いがあります。私たちが生み出した PeerDB が数千のユーザーに使われていることを誇りに思っています。WalShadow はその歩みをさらに前へ進めるもので、物理 WAL から直接レプリケーションする方式を捉え直し、Postgres と ClickHouse が統合されたスタックへまた一歩近づきます。
ベンチマークでは、単一のテーブルから発生し続ける変更をレプリケーションしました。Postgres、ClickHouse、各レプリケーションツールはいずれも同じリージョンで動かしています。インスタンスは控えめな構成の c8i.2xlarge で、いずれも 8 vCPU です。性能はワークロードによって変わりますが、この結果は WalShadow に期待できる水準のおおよその目安になります。
コミットから参照可能までのレイテンシーは約 200 ms

コミットから参照可能までのレイテンシーは、Postgres でトランザクションがコミットされてから、その行が ClickHouse で読めるようになるまでの時間です。Postgres 本来の物理レプリカでは約 50 ms で、これが現実的な基準値になります。WalShadow は約 200 ms でした。これは約 10 秒だった PeerDB に対して、このベンチマークでは約 50 分の 1 のレイテンシーです。
毎秒 289,000 行の持続スループット

ソースの Postgres インスタンスは毎秒およそ 290,000 行を挿入し続けており、これがレプリケーションパイプラインで処理できる上限になります。WalShadow は毎秒 289,000 行をレプリケーションし、ボトルネックになることなくソースとほぼ同じ速度を出しました。PeerDB は毎秒およそ 120,000 行で、ソースの速度の約 40% にとどまりました。
この結果は、レイテンシーを下げてもスループットを犠牲にしなくて済むことを示しています。WalShadow はソースのほぼ最大速度で動きながら、データをリアルタイムに保ちます。
まとめと展望
ClickHouse では、Postgres と ClickHouse を近づけるために大きな一歩をいくつも重ねてきました。PeerDB の買収、ClickPipes の Postgres CDC の提供開始、そして ClickHouse Managed Postgres の発表です。ClickHouse Managed Postgres は、エンタープライズ級の Postgres サービスです。高速な OLTP のためにローカル NVMe ストレージ上に構築し、高速な OLAP に向けて ClickHouse とネイティブに統合しています。
これらの取り組みが目指すところは 1 つです。トランザクションのための Postgres と分析のための ClickHouse を組み合わせた統合データスタックを、余計な作り込みなしで開発者へ届けることです。
WalShadow は、その構想に向けた大きな節目です。物理 WAL から ClickHouse ネイティブブロックへ直接レプリケーションすることで、分析までの遅れは 1 秒を切ります。論理レプリケーションに伴う運用上の負担も、多くがなくなります。従来の論理デコードのパイプラインでは扱いにくい高度なスキーマ変更にも対応します。
今後数か月かけて、ユーザーと緊密に協力しながら、さまざまな実運用のワークロードで WalShadow を強化していきます。すでに最初のデザインパートナーの皆さんと協業しており、対象を広げる準備が整いました。
プライベートプレビューにお申し込みください。1〜2 日でアクセスをご案内します。
WalShadow へのアクセス申請
ClickHouse Managed Postgres での WalShadow のプライベートプレビューにお申し込みください。
WalShadow は、Postgres と ClickHouse をシームレスに連携させるために進めている複数の取り組みの 1 つです。続報をお待ちください。
ClickHouse Managed Postgres を今すぐ始める
ClickHouse Managed Postgres がご自身のデータでどう動くかを確かめてみませんか。ClickHouse Cloud なら数分で始められ、300 ドル分の無料クレジットも受け取れます。
サインアップ


