データ基盤

TimescaleDBとは|30日ぶんを読むのに、月で区切っていれば区切らない場合の36.5分の1で済む

何を自動でやってくれるのか区切ると読む量はどう変わるのか区切りの単位はどう決めるのか

3年ぶん8760MBから30日ぶんを読む場面です。区切らなければ8760MBを読みます。

月で区切っていれば243MBです。36.5分の1で、必要な分とちょうど一致します。

この記事の要点

  • 区切らないと8760MB
  • 年で区切ると2920MB
  • 月で区切ると243MB
  • 日で区切ると240MB

普通の表として扱いながら、裏で区切られる

使う側からは1つの表に見えます。区切りは自動で作られ、問い合わせの側では意識しません。

TimescaleDBが足すのは、時刻での区切りです。出典はハイパーテーブルとは、時系列のデータや出来事のデータに対する即時の分析を支える、特別な機能を備えたPostgreSQLの表であると定めています。

土台は普通の表です。SQLもそのまま使えます

区切りは自動です。出典は時系列のデータを時刻で、必要に応じて他の軸でも自動的に分割するPostgreSQLの表を使うことで、これが実現されると説明しています。

自動になる部分

  1. 区切りの作成。新しい期間のデータが来ると作られる
  2. 行き先の判断。書き込むときに該当する区切りへ入る
  3. 読む範囲の絞り込み。条件から該当する区切りだけを見る
  4. 古い区切りの扱い。まとめたり消したりを期間で指定できる

3番目が次の節で測る対象です。出典も問い合わせを走らせると、正しい区切りを特定し、表の全体をたどる代わりに、その区切りに対して問い合わせを実行すると述べています。

自分で決める部分

自動なのは作ることと使うことで、区切りの単位そのものは指定します。1日か、1週間か、1か月かです。

この単位が読む量を決めます。次の節で、どこまで効くかを数えます

出典Tiger Data ドキュメント「Hypertables」2026-08-18 確認
Hypertables are PostgreSQL tables with special features that power real-time analytics on time-series and event data
原文Tiger Data ドキュメント「Hypertables」 この内容の有効期限2027-02-18

30日ぶんを読むのに、月で区切っていれば36.5分の1で済む

該当する区切りだけを読みます。減る量は、区切りの単位と問い合わせの幅の関係で決まります。

TimescaleDBの問い合わせは、該当する区切りだけを見ます。出典は問い合わせを走らせると、区切りと呼ばれる正しい分割を特定し、表の全体をたどる代わりに、その区切りに対して問い合わせを実行すると述べています。

どれだけ減るのかを、3年ぶんのデータで数えました。

区切りの単位を変える

text
3年ぶん(1095日)・1日 8MB。合わせて 8,760MB
期間で絞る問い合わせに対し、区切り方を変えて読む量を見る

区切り方                1日ぶん        7日ぶん       30日ぶん      365日ぶん     1095日ぶん
区切らない                8,760MB     8,760MB     8,760MB     8,760MB     8,760MB
年で区切る                2,920MB     2,920MB     2,920MB     2,920MB     8,760MB
月で区切る                  243MB       243MB       243MB     2,920MB     8,760MB
日で区切る                    8MB        56MB       240MB     2,920MB     8,760MB

30日ぶんの列を見てください。区切らなければ8760MB、月で区切れば243MBです。

36.5分の1になります。必要な240MBとほぼ一致しており、無駄がありません。

幅と単位を合わせる

同じ列で、日で区切った場合は240MBです。月で区切った243MBとほとんど変わりません。

つまり問い合わせの幅より細かく区切っても、読む量はそれ以上減りません

逆に、1日ぶんを読む列では差が出ます。月で区切ると243MB、日で区切れば8MBです。30.4倍の違いになります。

だから決め方は単純です。いちばん狭い問い合わせの幅に合わせることになります。

問い合わせの幅より細かく区切っても、それ以上は減らない。

単位: MB区切らない8760MB年で区切る2920MB月で区切る243MB日で区切る240MB3年ぶん8760MBから30日ぶんを読む場合。必要なのは240MBで、月の区切りでほぼ到達している。
図1 ── 区切りの単位と、30日ぶんを読むときの量
出典Tiger Data ドキュメント「Hypertables」2026-08-18 確認
When you run a query, Tiger Cloud identifies the correct partition, called chunk, and runs the query on it, instead of going through the entire table.
原文Tiger Data ドキュメント「Hypertables」 この内容の有効期限2027-02-18

時刻で絞らない問い合わせでは効かない

区切りは時刻で作られます。条件が時刻を含まなければ、全部の区切りを見ることになります。

TimescaleDBの区切りは、時刻を軸にしています。出典は裏では、時系列のデータを時刻で、必要に応じて他の軸でも自動的に分割するPostgreSQLの表を使うことで実現されると説明しています。

つまり絞る条件に時刻が入っていなければ、絞れません

効かない問い合わせ

  1. 特定の機器の全履歴。時刻の条件がない
  2. ある値を持つ行を探す。どの期間にあるか分からない
  3. 全期間の集計。前の表の最終列にあたる
  4. 最新の1件。新しい区切りから探せるが、なければ次を見る

1番目と2番目には、時刻とは別の索引が要ります。区切りだけでは足りません。

索引の効き目と代償はPostgreSQLの記事で数えていて、読みは203倍速くなる一方、索引8個で書きが20.4倍になりました。

区切りが増えすぎる場合

細かく区切ると、区切りの数そのものが増えます。3年を日で区切れば1095個です。

全期間を読む問い合わせでは、この1095個すべてを開くことになります。読む量は同じでも、開く手間が加わります

だから細かくすればよいわけではありません。いちばん狭い問い合わせの幅で止めるのが、両側の釣り合いになります。

余談 この計測での注意

1日8MBという値は置いたもので、実際には日によって量が違います。読む量は区切りの単位からの計算で、区切りを開く手間や索引の効きは含めていません。実際の実装では、区切りの中でさらに絞れる場合もあります。ここで見せているのは、区切りの単位より細かくは絞れないこと、問い合わせの幅を超えて細かくしても効かないという2つの関係です。

出典Tiger Data ドキュメント「Hypertables」2026-08-18 確認
Under the hood, this is achieved by using hypertables, PostgreSQL tables that automatically partition your time-series data by time and optionally by other dimensions.
原文Tiger Data ドキュメント「Hypertables」 この内容の有効期限2027-02-18

よくある質問

TimescaleDBは何を自動でやりますか
時刻での区切りです。時系列のデータを時刻で、必要なら他の軸でも自動的に分割すると説明されています。
区切ると読む量はどう変わりますか
30日ぶんを読む場合、区切らなければ8760MB、月で区切れば243MBでした。
細かく区切ればよいのですか
限度があります。30日ぶんを読むなら、月でも日でもほぼ同じ量になりました。
区切りの単位はどう決めますか
よく使う問い合わせの幅に合わせます。幅より細かく区切っても、読む量はそれ以上減りません。

まとめ

  • 時刻で自動的に区切る
  • 該当する区切りだけ読む
  • 単位は問い合わせの幅に合わせる
  • 細かくしてもそれ以上は減らない

今日から始められること

  1. よく使う問い合わせの期間の幅を調べる
  2. いまの区切りの単位と比べる
  3. 1日あたりのデータ量を測る
  4. 区切りの数が増えすぎていないか見る

実務で組んだTimescaleDBのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る