圧縮と保持ポリシー
TimescaleDBの列指向圧縮で古いチャンクを圧縮し、期限切れのチャンクを自動的に削除します。
「圧縮と保持ポリシー」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。
なぜ圧縮するのか
時系列データは圧縮しやすい性質があります。TimescaleDB はチャンクを列指向形式で圧縮し、多くの場合 10~20 倍の圧縮率を実現します。
ハイパーテーブルの圧縮
どの列で圧縮データをセグメント化し、並べ替えるかを設定します。
ALTER TABLE metrics SET (
timescaledb.compress,
timescaledb.compress_segmentby = 'device_id',
timescaledb.compress_orderby = 'ts DESC'
);圧縮ポリシー
古いチャンクの圧縮を自動化します。
SELECT add_compression_policy('metrics', INTERVAL '7 days');
-- Chunks older than 7 days get compressed automatically.圧縮データのクエリパフォーマンス
圧縮チャンクの読み取りも高速です。TimescaleDB がフィルターを列ストアにプッシュダウンするためです。圧縮チャンクへの書き込みや更新には制限があり、主に追加のみとなります。
保持ポリシー
N 個の期間より古いデータを削除します。DELETE よりも、チャンクを削除する高速な方法です。
SELECT add_retention_policy('metrics', INTERVAL '90 days');
-- Chunks older than 90 days are dropped automatically.チャンクの手動操作
チャンクを確認します。
SELECT * FROM chunks_detailed_size('metrics');
SELECT show_chunks('metrics', older_than => INTERVAL '90 days');
SELECT drop_chunks('metrics', older_than => INTERVAL '90 days');ストレージ階層化
チャンクごとにテーブルスペースを変更して、古いチャンクを低速なディスクに移動します。圧縮と組み合わせることで、数年分のデータを低コストで保持できます。
実際の圧縮率
センサーデータでの一般的な圧縮率:
- 数値メトリクス:90~95% 以上の領域削減
- カテゴリデータ:70~80%
- 文字列/JSON:内容によって異なります
更新のための展開
チャンクを展開して古いデータを更新し、その後で再圧縮できます。
SELECT decompress_chunk(c) FROM show_chunks('metrics', newer_than => INTERVAL '60 days') c;
-- Update / fix
SELECT compress_chunk(c) FROM show_chunks('metrics', newer_than => INTERVAL '60 days') c;通常の Postgres での代替手段
TimescaleDB がなくても、パーティションを使って同様の仕組みを自分で構築できます。
DROP TABLE events_2022; -- retention (fast)
-- No native columnar compression in vanilla Postgres for time-series.継続的集計との組み合わせ
一般的なパターンは、生データを 30 日間、1 時間単位の集計を 1 年間、日単位の集計を永久に保持する方法です。各階層を適切に圧縮または保持します。
監視
圧縮後のサイズと圧縮率を追跡します。
SELECT * FROM hypertable_compression_stats('metrics');まとめ
圧縮と保持を組み合わせることで、Postgres を実用的な時系列データストアにできます。
- 古いチャンクを 10~20 倍に圧縮します
- 保持期間を過ぎたチャンクを即座に削除します
- 保持期間に応じて、生データ・1 時間単位・日単位の階層に分けます
- 必要に応じて展開してバックフィルします
クイックチェック
生のメトリクスを 7 日間保持し、それより古いデータを自動的に削除したいとします。TimescaleDB ではどのように実現しますか?
よくある質問
「圧縮と保持ポリシー」レッスンは無料ですか?
はい。「圧縮と保持ポリシー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。
「圧縮と保持ポリシー」で何を学びますか?
TimescaleDBの列指向圧縮で古いチャンクを圧縮し、期限切れのチャンクを自動的に削除します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
SQL Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「圧縮と保持ポリシー」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSQL Academyレッスンでコードを書いて実行できますか?
はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- TimescaleDBハイパーテーブル
- 継続的集約
- 圧縮と保持ポリシー
- 時系列インデックスの選択