TimescaleDB から ClickHouse への複製:ユースケース・機能・仕組み
このブログはClickHouse公式ページの翻訳Verです。
https://clickhouse.com/blog/timescale-to-clickhouse-clickpipe-cdc
ClickPipes の Postgres CDC コネクタは、Postgres(TimescaleDB を含む)から ClickHouse Cloud へのリアルタイムデータレプリケーションを実現します。ワンタイム移行と継続的レプリケーションの両方に対応し、オープンソースの PeerDB によって動作しています。PeerDB は 2024 年に ClickHouse に買収されました。
ユースケース
1. オンライン移行
TimescaleDB のパフォーマンスが限界に達した顧客が、ClickHouse へ一括移行を希望する場合があります。ClickPipes は シームレスなオンライン移行 をサポートしています。
2. 段階的移行
複雑な環境では、まず読み込みを移行し、次に書き込みを移すなど段階的な移行を行うことがあります。Postgres CDC により、遅延数秒で両者を同期しつつ移行可能です。
“Postgres CDC コネクタのおかげで、パイプラインを大きく変更せずに ClickHouse Cloud に移行できました。ダッシュボードが高速化し、分析が効率的になりました。”
— Kindly.ai チーム
3. 共存構成
トランザクション系データは TimescaleDB に、分析系は ClickHouse に処理を分けたいケース。CDC により、運用中のデータがリアルタイムに ClickHouse に反映されます。
主な機能と仕組み
-
初期ロード + 継続同期
初期データのスナップショットと CDC に対応。TimescaleDB の Hypertable に対応し、圧縮・非圧縮両方を扱えます。 -
並列スナップショット
大容量テーブルをマルチスレッドで数時間以内に移行。圧縮 Hypertable はctid
非対応のためフォールバック処理あり。 -
スキーマ変更対応
追加・削除などの変更を自動同期。 -
豊富なアラート & メトリクス
スループット、レイテンシ、レプリケーションスロットサイズなどを監視。Slack やメールへの通知にも対応。
アーキテクチャ:Hypertable とチャンクの扱い
TimescaleDB の Hypertable はチャンクに分割されており、CDC はチャンク単位での同期が必要です。通常のパーティションと異なり publish_via_partition_root
を利用できないため、ClickPipes(PeerDB)が 親テーブルを明示的にルックアップ し、正しく ClickHouse 側へ変更を送ります。
さらに、新しいチャンクは TimescaleDB の _timescaledb_internal
スキーマに生成されるため、これもパブリケーション対象に含めることで 新規チャンクの自動取り込み が可能になります。
圧縮対応の工夫
圧縮 Hypertable(ctid
が使えない)向けに、Avro や Zstd を活用した micro-optimizations によって高速処理を維持。エラーを検出して自動で処理経路を切り替える機能も搭載されています。
出典: TimescaleDB to ClickHouse replication: Use cases, features, and how we built it – ClickHouse 公式ブログ