背景
TimescaleDB は Timescale Inc が開発したオープンソースの Postgres 拡張機能で、 Postgres から移行することなく分析クエリのパフォーマンス向上を図ることを目的としています。これは、 拡張機能によって管理され、自動的に "chunks" にパーティション化される "ハイパーテーブル" を作成することで実現されます。 また、ハイパーテーブルは透過的な圧縮とハイブリッドな行・列指向ストレージ ("hypercore" と呼ばれます) もサポートしていますが、これらの 機能を利用するには proprietary license の拡張機能バージョンが必要です。
Timescale Inc は TimescaleDB 向けに 2 つのマネージドサービスも提供しています。
Managed Service for TimescaleTimescale Cloud.
TimescaleDB 拡張機能を利用できるマネージドサービスを提供するサードパーティベンダーもありますが、 ライセンス上の理由から、これらのベンダーがサポートしているのはオープンソース版の拡張機能のみです。
Timescale の ハイパーテーブル は、通常の Postgres テーブルとはいくつかの点で動作が異なります。これにより、 それらをレプリケートするプロセスにはいくつかの複雑さが生じるため、Timescale ハイパーテーブル のレプリケーション機能は ベストエフォート と考えるべきです。
サポート対象の Postgres バージョン
ClickPipes は Postgres バージョン 12 以降に対応しています。
論理レプリケーションを有効にする
必要な手順は、TimescaleDB を使用する Postgres インスタンスのデプロイ方法によって異なります。
- マネージドサービスを使用しており、そのプロバイダーがサイドバーに掲載されている場合は、そのプロバイダー向けのガイドに従ってください。
- TimescaleDB を自分でデプロイしている場合は、汎用ガイドに従ってください。
その他のマネージドサービスについては、論理レプリケーションがまだ有効になっていない場合、有効化を支援してもらうためにプロバイダーへサポートチケットを提出してください。
設定
Timescale のハイパーテーブル自体には、挿入されたデータは保存されません。代わりに、データは
_timescaledb_internal スキーマ内にある対応する複数の
「chunk」テーブルに保存されます。ハイパーテーブルに対してクエリを実行するうえでは、これは
問題になりません。しかし、論理レプリケーション中は、ハイパーテーブルの変更ではなく、
chunk テーブルの変更を検出することになります。Postgres ClickPipe には、chunk テーブルから親ハイパーテーブルへの変更を自動的に再マッピングするロジックがありますが、
これには追加の手順が必要です。
-
ClickPipes 専用のユーザーを作成します:
CREATE USER clickpipes_user PASSWORD 'some-password'; -
前の手順で作成したユーザーに、スキーマレベルの読み取り専用アクセス権を付与します。次の例は
publicスキーマに対する権限を示しています。レプリケーションしたいテーブルを含む各スキーマに対して、これらのコマンドを繰り返し実行してください:GRANT USAGE ON SCHEMA "public" TO clickpipes_user; GRANT SELECT ON ALL TABLES IN SCHEMA "public" TO clickpipes_user; ALTER DEFAULT PRIVILEGES IN SCHEMA "public" GRANT SELECT ON TABLES TO clickpipes_user; -
ユーザーにレプリケーション権限を付与します:
ALTER USER clickpipes_user WITH REPLICATION; -
Postgres のスーパーユーザーまたは管理者として、レプリケーションしたいハイパーテーブルを含む publication を作成します。パイプが基盤となる chunk からの変更を受け取れるようにするため、publication には
_timescaledb_internalスキーマ全体も必ず含める必要があります。パフォーマンス上のオーバーヘッドを避けるため、publication には必要なテーブルだけを含めることを強く推奨します。
-- When adding new tables to the ClickPipe, you'll need to add them to the publication manually as well.
CREATE PUBLICATION clickpipes FOR TABLE table_to_replicate, table_to_replicate2, TABLES IN SCHEMA _timescaledb_internal;clickpipes publication は、変更イベントが ClickPipes にストリーミングされる対象のテーブル集合を定義します。すべてのテーブルをレプリケーションする意図がない限り、FOR ALL TABLES の使用は推奨しません。不要なテーブルを含めると、Postgres から ClickPipes への WAL トラフィックが増加し、レプリケーション全体の効率が低下するためです。
これらの手順が完了したら、ClickPipe の作成に進めます。
ネットワークアクセスを設定する
Timescale インスタンスへのトラフィックを制限する場合は、ドキュメントに記載されている固定 NAT IPを許可リストに追加してください。 この設定手順はプロバイダーによって異なります。お使いのプロバイダーが記載されている場合はサイドバーを参照するか、プロバイダーに チケットを起票してください。