3年ぶん8760MBから30日ぶんを読む場面です。区切らなければ8760MBを読みます。
月で区切っていれば243MBです。36.5分の1で、必要な分とちょうど一致します。
使う側からは1つの表に見えます。区切りは自動で作られ、問い合わせの側では意識しません。
TimescaleDBが足すのは、時刻での区切りです。出典はハイパーテーブルとは、時系列のデータや出来事のデータに対する即時の分析を支える、特別な機能を備えたPostgreSQLの表であると定めています。
土台は普通の表です。SQLもそのまま使えます。
区切りは自動です。出典は時系列のデータを時刻で、必要に応じて他の軸でも自動的に分割するPostgreSQLの表を使うことで、これが実現されると説明しています。
3番目が次の節で測る対象です。出典も問い合わせを走らせると、正しい区切りを特定し、表の全体をたどる代わりに、その区切りに対して問い合わせを実行すると述べています。
自動なのは作ることと使うことで、区切りの単位そのものは指定します。1日か、1週間か、1か月かです。
この単位が読む量を決めます。次の節で、どこまで効くかを数えます。
Hypertables are PostgreSQL tables with special features that power real-time analytics on time-series and event data原文Tiger Data ドキュメント「Hypertables」 この内容の有効期限2027-02-18
該当する区切りだけを読みます。減る量は、区切りの単位と問い合わせの幅の関係で決まります。
TimescaleDBの問い合わせは、該当する区切りだけを見ます。出典は問い合わせを走らせると、区切りと呼ばれる正しい分割を特定し、表の全体をたどる代わりに、その区切りに対して問い合わせを実行すると述べています。
どれだけ減るのかを、3年ぶんのデータで数えました。
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倍の違いになります。
だから決め方は単純です。いちばん狭い問い合わせの幅に合わせることになります。
問い合わせの幅より細かく区切っても、それ以上は減らない。
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番目には、時刻とは別の索引が要ります。区切りだけでは足りません。
索引の効き目と代償はPostgreSQLの記事で数えていて、読みは203倍速くなる一方、索引8個で書きが20.4倍になりました。
細かく区切ると、区切りの数そのものが増えます。3年を日で区切れば1095個です。
全期間を読む問い合わせでは、この1095個すべてを開くことになります。読む量は同じでも、開く手間が加わります。
だから細かくすればよいわけではありません。いちばん狭い問い合わせの幅で止めるのが、両側の釣り合いになります。
1日8MBという値は置いたもので、実際には日によって量が違います。読む量は区切りの単位からの計算で、区切りを開く手間や索引の効きは含めていません。実際の実装では、区切りの中でさらに絞れる場合もあります。ここで見せているのは、区切りの単位より細かくは絞れないこと、問い合わせの幅を超えて細かくしても効かないという2つの関係です。
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
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る