著者はCOVID-19救済基金を選択し、 Write forDOnationsプログラムの一環として寄付を受け取りました。

序章

監視システムやデータ収集システムなどの多くのアプリケーションは、さらに分析するためにデータを蓄積します。 これらの分析では、データやシステムが時間の経過とともにどのように変化するかを調べることがよくあります。 このような場合、データは時系列として表され、すべてのデータポイントにタイムスタンプが付いています。 例は次のようになります。

2020-06-01 09:00:00    server.cpu.1    0.9
2020-06-01 09:00:00    server.cpu.15   0.8
2020-06-01 09:01:00    server.cpu.1    0.9
2020-06-01 09:01:00    server.cpu.15   0.8
...

モノのインターネット(IoT)と産業用モノのインターネットの新しい展開のおかげで、時系列データの関連性は最近高まっています。 さまざまな時系列情報を収集するデバイスはますます増えています。たとえば、フィットネストラッカー、スマートウォッチ、自宅の気象観測所、さまざまなセンサーなどです。 これらのデバイスは多くの情報を収集するため、このデータはすべてどこかに保存する必要があります。

従来のリレーショナルデータベースは、データの保存に最もよく使用されますが、時系列の膨大なデータ量に関しては、常に適合するとは限りません。 大量の時系列データを処理する必要がある場合、リレーショナルデータベースは遅すぎる可能性があります。 このため、リレーショナルデータベースの問題を回避するために、NoSQLデータベースと呼ばれる特別に最適化されたデータベースが作成されました。

TimescaleDB は、時系列データを格納するために最適化されたオープンソースデータベースです。 PostgreSQL の拡張として実装され、リレーショナルデータベースの使いやすさとNoSQLデータベースの速度を兼ね備えています。 その結果、PostgreSQLを使用してビジネスデータと時系列データの両方を1か所に保存できます。

このチュートリアルに従うことで、Ubuntu 20.04でTimescaleDBをセットアップし、構成し、操作方法を学習します。 時系列データベースの作成と簡単なクエリの作成を実行します。 最後に、不要なデータを取り除く方法を説明します。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • Ubuntu 20.04の初期サーバーセットアップガイドに従ってセットアップされた1つのUbuntu20.04サーバー。これには、sudo権限を持つ非rootユーザーとファイアウォールが含まれます。

  • サーバーにPostgreSQLがインストールされています。 Ubuntu20.04にPostgreSQLをインストールして使用する方法のステップ1に従ってインストールします。

ステップ1—TimescaleDBをインストールする

TimescaleDBはUbuntuのデフォルトのパッケージリポジトリでは利用できないため、このステップでは、TimescaleDBパーソナルパッケージアーカイブ(PPA)からインストールします。

まず、TimescaleのAPTリポジトリを追加します。

  1. sudo add-apt-repository ppa:timescale/timescaledb-ppa

ENTERキーを押して、このアクションを確認します。

次に、APTキャッシュを更新して、パッケージリストを更新します。

  1. sudo apt update

これで、インストールを続行できます。 このチュートリアルでは、PostgreSQLバージョン12を使用します。 別のバージョンのPostgreSQL(たとえば、11または10)を使用している場合は、次のコマンドの値を置き換えて実行します。

  1. sudo apt install timescaledb-postgresql-12

注: PostgreSQLバージョン9.6.3以降および10.9以降のサポートは廃止され、将来のリリースで削除される予定です。

これでTimescaleDBがインストールされ、使用できるようになりました。 次に、それをオンにして、データベースを最適化するためにPostgreSQL構成ファイルでそれに関連付けられている設定のいくつかを調整します。

ステップ2—TimescaleDBの構成

TimescaleDBモジュールは、デフォルトのPostgreSQL構成設定で正常に動作しますが、パフォーマンスを向上させ、プロセッサ、メモリ、およびディスクリソースをより有効に活用するために、TimescaleDBの開発者はいくつかの個別のパラメーターを構成することをお勧めします。 これは、timescaledb-tuneツールを使用して自動的に実行するか、サーバーのpostgresql.confファイルを手動で編集することによって実行できます。

このチュートリアルでは、timescaledb-tuneツールを使用します。 postgresql.confファイルを読み取り、インタラクティブに変更を提案します。

次のコマンドを実行して、構成ウィザードを開始します。

  1. sudo timescaledb-tune

まず、PostgreSQL構成ファイルへのパスを確認するように求められます。

Output
Using postgresql.conf at this path: /etc/postgresql/12/main/postgresql.conf Is this correct? [(y)es/(n)o]:

ユーティリティは構成ファイルへのパスを自動的に検出するため、yと入力してこれを確認します。

Output
... Is this correct? [(y)es/(n)o]: y Writing backup to: /tmp/timescaledb_tune.backup202005300523

次に、PostgreSQLサーバーの起動時にshared_preload_libraries変数を変更して、TimescaleDBモジュールをプリロードするように求められます。

[secondary_label Output]	
shared_preload_libraries needs to be updated	
Current:	
#shared_preload_libraries = ''	
Recommended:	
shared_preload_libraries = 'timescaledb'	
Is this okay? [(y)es/(n)o]:	

shared_preload_librariesは、モジュールのコンマ区切りリストを値として受け入れ、データベースサーバーを起動する前にPostgreSQLがロードするモジュールを指定します。 この変更を行うと、timescaledbモジュールがそのリストに追加されます。

このプロンプトでyと入力し、ENTERを押して、TimescaleDBモジュールを有効にします。

[secondary_label Output]	
...
Is this okay? [(y)es/(n)o]:  y
success: shared_preload_libraries will be updated

サーバーの特性とPostgreSQLのバージョンに基づいて、設定を調整するように求められます。 yを押して、チューニングプロセスを開始します。

Output
Tune memory/parallelism/WAL and other settings? [(y)es/(n)o]: y Recommendations based on 7.79 GB of available memory and 4 CPUs for PostgreSQL 12 Memory settings recommendations Current: shared_buffers = 128MB #effective_cache_size = 4GB #maintenance_work_mem = 64MB #work_mem = 4MB Recommended: shared_buffers = 1990MB effective_cache_size = 5971MB maintenance_work_mem = 1019114kB work_mem = 5095kB Is this okay? [(y)es/(s)kip/(q)uit]:

timescaledb-tuneは、サーバーの使用可能なメモリを自動的に検出し、shared_bufferseffective_cache_sizemaintenance_work_mem、およびwork_mem設定の推奨値を計算します。 たとえば、shared_buffersは、データのキャッシュに割り当てられるメモリの量を決定します。 デフォルトでは、この設定はプラットフォームの範囲を広げるために比較的低いため、timescaledb-tuneは値を増やし、繰り返しクエリなどのキャッシュされた情報を格納するためのスペースを増やすことでリソースをより有効に活用することを提案しています。 work_mem変数も増加し、より複雑なソートが可能になりました。

このチューナーの動作について詳しく知りたい場合は、GitHubページでtimescaledb-tuneを確認してください。

yと入力して、値を受け入れます。

Output
... Is this okay? [(y)es/(s)kip/(q)uit]: y success: memory settings will be updated

この時点で、サーバーに複数のCPUがある場合は、並列処理設定の推奨事項が見つかります。 ただし、CPUが1つある場合は、timescaledb-tuneによってWAL設定に直接移動します。

複数のCPUを使用している場合は、次のような推奨事項があります。

Output
Parallelism settings recommendations Current: missing: timescaledb.max_background_workers #max_worker_processes = 8 #max_parallel_workers_per_gather = 2 #max_parallel_workers = 8 Recommended: timescaledb.max_background_workers = 8 max_worker_processes = 15 max_parallel_workers_per_gather = 2 max_parallel_workers = 4 Is this okay? [(y)es/(s)kip/(q)uit]:

これらの設定は、リクエストとバックグラウンドタスクを処理するワーカーの数を調整します。 これらの設定の詳細については、TimescaleDBおよびPostgreSQLのドキュメントを参照してください。

yENTERの順に入力して、次の設定を受け入れます。

Output
... Is this okay? [(y)es/(s)kip/(q)uit]: y success: parallelism settings will be updated

次に、先行書き込みログ(WAL)設定の推奨事項を示します。

Output
WAL settings recommendations Current: #wal_buffers = -1 #min_wal_size = 80MB Recommended: wal_buffers = 16MB min_wal_size = 512MB Is this okay? [(y)es/(s)kip/(q)uit]:

WALはデータの整合性を維持しますが、デフォルト設定ではI / Oが非効率になり、書き込みパフォーマンスが低下する可能性があります。 yと入力して入力し、次の設定を最適化します。

Output
... Is this okay? [(y)es/(s)kip/(q)uit]: y success: WAL settings will be updated

これで、その他の推奨事項がいくつか見つかります。

Output
Miscellaneous settings recommendations Current: #default_statistics_target = 100 #random_page_cost = 4.0 #checkpoint_completion_target = 0.5 #max_locks_per_transaction = 64 #autovacuum_max_workers = 3 #autovacuum_naptime = 1min #effective_io_concurrency = 1 Recommended: default_statistics_target = 500 random_page_cost = 1.1 checkpoint_completion_target = 0.9 max_locks_per_transaction = 64 autovacuum_max_workers = 10 autovacuum_naptime = 10 effective_io_concurrency = 200 Is this okay? [(y)es/(s)kip/(q)uit]:

これらのさまざまなパラメータはすべて、パフォーマンスの向上を目的としています。 たとえば、SSDは多数の同時リクエストを処理できるため、effective_io_concurrencyの最適な値は数百になる可能性があります。 これらのオプションの詳細については、PostgreSQLのドキュメントを参照してください。

yENTERの順に押して続行します。

Output
... Is this okay? [(y)es/(s)kip/(q)uit]: y success: miscellaneous settings will be updated Saving changes to: /etc/postgresql/12/main/postgresql.conf

その結果、/etc/postgresql/12/main/postgresql.confに既製の構成ファイルが作成されます。

注:最初からインストールを行う場合は、--quietおよび--yesフラグを使用して初期コマンドを実行することもできます。これにより、すべての推奨事項が自動的に適用されます。 postgresql.conf構成ファイルに変更を加えます。

  1. sudo timescaledb-tune --quiet --yes

構成の変更を有効にするには、PostgreSQLサービスを再起動する必要があります。

  1. sudo systemctl restart postgresql.service

これで、データベースは最適なパラメーターで実行され、時系列データを処理する準備が整いました。 次の手順では、新しいデータベースとハイパーテーブルを作成して操作を実行することにより、このデータの操作を試してみます。

ステップ3—新しいデータベースとHypertableを作成する

TimescaleDBのセットアップが最適化されると、時系列データを操作する準備が整います。 TimescaleDBはPostgreSQLの拡張として実装されているため、時系列データを使用した操作はリレーショナルデータ操作と大差ありません。 同時に、データベースを使用すると、将来、時系列テーブルとリレーショナルテーブルのデータを自由に組み合わせることができます。

まず、新しいデータベースを作成し、そのデータベースのTimescaleDB拡張機能をオンにします。 PostgreSQLデータベースにログインします。

  1. sudo -u postgres psql

次に、新しいデータベースを作成して接続します。 このチュートリアルでは、データベースにtimeseriesという名前を付けます。

  1. CREATE DATABASE timeseries;
  2. \c timeseries

PostgreSQLデータベースの操作に関する追加情報は、次の場所にあります。 CloudServerチュートリアルでPostgreSQLでテーブルを作成、削除、管理する方法

最後に、TimescaleDB拡張機能を有効にします。

  1. CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

次の出力が表示されます。

Output
WARNING: WELCOME TO _____ _ _ ____________ |_ _(_) | | | _ \ ___ \ | | _ _ __ ___ ___ ___ ___ __ _| | ___| | | | |_/ / | | | | _ ` _ \ / _ \/ __|/ __/ _` | |/ _ \ | | | ___ \ | | | | | | | | | __/\__ \ (_| (_| | | __/ |/ /| |_/ / |_| |_|_| |_| |_|\___||___/\___\__,_|_|\___|___/ \____/ Running version 1.7.1 For more information on TimescaleDB, please visit the following links: 1. Getting started: https://docs.timescale.com/getting-started 2. API reference documentation: https://docs.timescale.com/api 3. How TimescaleDB is designed: https://docs.timescale.com/introduction/architecture Note: TimescaleDB collects anonymous reports to better understand and assist our users. For more information and how to disable, please see our docs https://docs.timescaledb.com/using-timescaledb/telemetry. CREATE EXTENSION

時系列データとの主な相互作用のポイントは、 hypertables です。これは、チャンクと呼ばれる、データを保持する多くの個々のテーブルの抽象化です。

ハイパーテーブルを作成するには、通常のSQLテーブルから始めて、関数create_hypertableを使用してハイパーテーブルに変換します。

このチュートリアルでは、デバイスのコレクション全体の温度と湿度を経時的に追跡するためのデータを格納するテーブルを作成します。

  1. CREATE TABLE conditions (
  2. time TIMESTAMP WITH TIME ZONE NOT NULL,
  3. device_id TEXT,
  4. temperature NUMERIC,
  5. humidity NUMERIC
  6. );

このコマンドは、4列のconditionsというテーブルを作成します。 最初の列にはタイムスタンプが格納されます。これにはタイムゾーンが含まれ、空にすることはできません。 次に、時間列を使用して、テーブルを時間で分割されたハイパーテーブルに変換します。

  1. SELECT create_hypertable('conditions', 'time');

このコマンドは、 create_hypertable()関数を呼び出します。この関数は、PostgreSQLテーブルからTimescaleDBハイパーテーブルを作成し、後者を置き換えます。

次の出力が表示されます。

Output
create_hypertable ------------------------- (1,public,conditions,t) (1 row)

このステップでは、時系列データを格納するための新しいハイパーテーブルを作成しました。 これで、ハイパーテーブルに書き込んでデータを入力し、削除するプロセスを実行できます。

ステップ4—データの書き込みと削除

このステップでは、標準のSQLコマンドを使用してデータを挿入し、外部ソースから大量のデータセットをインポートします。 これにより、TimescaleDBのリレーショナルデータベースの側面がわかります。

まず、基本的なコマンドを試してください。 標準のINSERTSQLコマンドを使用して、データをHypertableに挿入できます。 次のコマンドを使用して、理論上のデバイスweather-pro-000000のサンプルtemperatureおよびhumidityデータを挿入します。

  1. INSERT INTO conditions(time, device_id, temperature, humidity)
  2. VALUES (NOW(), 'weather-pro-000000', 84.1, 84.1);

次の出力が表示されます。

Output
INSERT 0 1

一度に複数行のデータを挿入することもできます。 次のことを試してください。

  1. INSERT INTO conditions
  2. VALUES
  3. (NOW(), 'weather-pro-000002', 71.0, 51.0),
  4. (NOW(), 'weather-pro-000003', 70.5, 50.5),
  5. (NOW(), 'weather-pro-000004', 70.0, 50.2);

あなたは以下を受け取ります:

Output
INSERT 0 3

RETURNINGステートメントを使用して、INSERTコマンドが挿入されたデータの一部またはすべてを返すように指定できます。

  1. INSERT INTO conditions
  2. VALUES (NOW(), 'weather-pro-000002', 70.1, 50.1) RETURNING *;

次の出力が表示されます。

Output
time | device_id | temperature | humidity -------------------------------+--------------------+-------------+---------- 2020-05-30 05:31:27.842009+00 | weather-pro-000002 | 70.1 | 50.1 (1 row)

ハイパーテーブルからデータを削除する場合は、標準のDELETESQLコマンドを使用します。 次のコマンドを実行して、temperature80よりも高い、またはhumidity50よりも高いデータを削除します。

  1. DELETE FROM conditions WHERE temperature > 80;
  2. DELETE FROM conditions WHERE humidity > 50;

削除操作の後、VACUUMコマンドを使用することをお勧めします。これにより、削除されたデータによってまだ使用されているスペースが再利用されます。

  1. VACUUM conditions;

VACUUMコマンドの詳細については、PostgreSQLのドキュメントを参照してください。

これらのコマンドは小規模なデータ入力には適していますが、時系列データは複数のデバイスから同時に巨大なデータセットを生成することが多いため、一度に数百または数千の行を挿入する方法も知っておく必要があります。 csv 形式など、構造化された形式で外部ソースからデータを準備した場合、このタスクはすばやく実行できます。

これをテストするには、さまざまな場所の温度と湿度のデータを表すサンプルデータセットを使用します。 これは、データベースをテストできるようにするためにTimescaleDB開発者によって作成されました。 サンプルデータセットの詳細については、TimescaleDBのドキュメントをご覧ください。

次に、weather_smallサンプルデータセットからデータベースにデータをインポートします。 まず、Postgresqlを終了します。

  1. \q

次に、データセットをダウンロードして抽出します。

  1. wget https://timescaledata.blob.core.windows.net/datasets/weather_small.tar.gz
  2. tar -xvzf weather_small.tar.gz

次に、温度と湿度のデータをデータベースにインポートします。

  1. sudo -u postgres psql -d timeseries -c "\COPY conditions FROM weather_small_conditions.csv CSV"

これにより、timeseriesデータベースに接続し、\COPYコマンドを実行して、選択したファイルからconditionsハイパーテーブルにデータをコピーします。 数秒間実行されます。

データがテーブルに入力されると、次の出力が表示されます。

Output
COPY 1000000

このステップでは、データをハイパーテーブルに手動およびバッチで追加しました。 次に、クエリの実行に進みます。

ステップ5—データのクエリ

テーブルにデータが含まれているので、さまざまなクエリを実行してデータを分析できます。

開始するには、データベースにログインします。

  1. sudo -u postgres psql -d timeseries

前述のように、ハイパーテーブルを操作するには、標準のSQLコマンドを使用できます。 たとえば、conditionsハイパーテーブルの最後の10エントリを表示するには、次のコマンドを実行します。

  1. SELECT * FROM conditions LIMIT 10;

次の出力が表示されます。

Output
time | device_id | temperature | humidity ------------------------+--------------------+--------------------+---------- 2016-11-15 12:00:00+00 | weather-pro-000000 | 39.9 | 49.9 2016-11-15 12:00:00+00 | weather-pro-000001 | 32.4 | 49.8 2016-11-15 12:00:00+00 | weather-pro-000002 | 39.800000000000004 | 50.2 2016-11-15 12:00:00+00 | weather-pro-000003 | 36.800000000000004 | 49.8 2016-11-15 12:00:00+00 | weather-pro-000004 | 71.8 | 50.1 2016-11-15 12:00:00+00 | weather-pro-000005 | 71.8 | 49.9 2016-11-15 12:00:00+00 | weather-pro-000006 | 37 | 49.8 2016-11-15 12:00:00+00 | weather-pro-000007 | 72 | 50 2016-11-15 12:00:00+00 | weather-pro-000008 | 31.3 | 50 2016-11-15 12:00:00+00 | weather-pro-000009 | 84.4 | 87.8 (10 rows)

このコマンドを使用すると、データベースにあるデータを確認できます。 データベースには100万件のレコードが含まれているため、LIMIT 10を使用して出力を10エントリに制限しました。

最新のエントリを表示するには、データ配列を時間の降順で並べ替えます。

  1. SELECT * FROM conditions ORDER BY time DESC LIMIT 20;

これにより、最新の上位20エントリが出力されます。

フィルタを追加することもできます。 たとえば、weather-pro-000000デバイスからのエントリを表示するには、次のコマンドを実行します。

  1. SELECT * FROM conditions WHERE device_id = 'weather-pro-000000' ORDER BY time DESC LIMIT 10;

この場合、weather-pro-000000デバイスによって記録された最新の10個の温度と湿度のデータポイントが表示されます。

TimescaleDBは、標準のSQLコマンドに加えて、時系列データ分析に役立つ多くの特別な関数も提供します。 たとえば、温度値の中央値を見つけるには、percentile_cont関数で次のクエリを使用できます。

  1. SELECT percentile_cont(0.5)
  2. WITHIN GROUP (ORDER BY temperature)
  3. FROM conditions
  4. WHERE device_id = 'weather-pro-000000';

次の出力が表示されます。

Output
percentile_cont ------------------- 40.49999999999998 (1 row)

このようにして、weather-pro-00000センサーが配置されている観測期間全体の温度の中央値が表示されます。

各センサーの最新の値を表示するには、last機能を使用できます。

  1. select device_id, last(temperature, time)
  2. FROM conditions
  3. GROUP BY device_id;

出力には、すべてのセンサーと関連する最新の値のリストが表示されます。

最初の値を取得するには、first関数を使用します。

次の例はもっと複雑です。 過去24時間以内の、選択したセンサーの1時間ごとの平均、最低、および最高気温が表示されます。

  1. SELECT time_bucket('1 hour', time) "hour",
  2. trunc(avg(temperature), 2) avg_temp,
  3. trunc(min(temperature), 2) min_temp,
  4. trunc(max(temperature), 2) max_temp
  5. FROM conditions
  6. WHERE device_id = 'weather-pro-000000'
  7. GROUP BY "hour" ORDER BY "hour" DESC LIMIT 24;

ここでは、PostgreSQL date_trunc関数のより強力なバージョンとして機能するtime_bucket関数を使用しました。 その結果、1日のどの時間帯に気温が上昇または下降するかがわかります。

Output
hour | avg_temp | min_temp | max_temp ------------------------+----------+----------+---------- 2016-11-16 21:00:00+00 | 42.00 | 42.00 | 42.00 2016-11-16 20:00:00+00 | 41.92 | 41.69 | 42.00 2016-11-16 19:00:00+00 | 41.07 | 40.59 | 41.59 2016-11-16 18:00:00+00 | 40.11 | 39.79 | 40.59 2016-11-16 17:00:00+00 | 39.46 | 38.99 | 39.79 2016-11-16 16:00:00+00 | 38.54 | 38.19 | 38.99 2016-11-16 15:00:00+00 | 37.56 | 37.09 | 38.09 2016-11-16 14:00:00+00 | 36.62 | 36.39 | 37.09 2016-11-16 13:00:00+00 | 35.59 | 34.79 | 36.29 2016-11-16 12:00:00+00 | 34.59 | 34.19 | 34.79 2016-11-16 11:00:00+00 | 33.94 | 33.49 | 34.19 2016-11-16 10:00:00+00 | 33.27 | 32.79 | 33.39 2016-11-16 09:00:00+00 | 33.37 | 32.69 | 34.09 2016-11-16 08:00:00+00 | 34.94 | 34.19 | 35.49 2016-11-16 07:00:00+00 | 36.12 | 35.49 | 36.69 2016-11-16 06:00:00+00 | 37.02 | 36.69 | 37.49 2016-11-16 05:00:00+00 | 38.05 | 37.49 | 38.39 2016-11-16 04:00:00+00 | 38.71 | 38.39 | 39.19 2016-11-16 03:00:00+00 | 39.72 | 39.19 | 40.19 2016-11-16 02:00:00+00 | 40.67 | 40.29 | 40.99 2016-11-16 01:00:00+00 | 41.63 | 40.99 | 42.00 2016-11-16 00:00:00+00 | 42.00 | 42.00 | 42.00 2016-11-15 23:00:00+00 | 42.00 | 42.00 | 42.00 2016-11-15 22:00:00+00 | 42.00 | 42.00 | 42.00 (24 rows)

より便利な関数は、TimescaleDBドキュメントにあります。

これで、データの処理方法がわかりました。 次に、不要なデータを削除する方法とデータを圧縮する方法について説明します。

ステップ6—データの圧縮と削除の構成

データが蓄積されると、ハードドライブ上でますます多くのスペースを占有します。 スペースを節約するために、TimescaleDBの最新バージョンはデータ圧縮機能を提供します。 この機能は、ファイルシステム設定を微調整する必要がなく、データベースをより効率的にするために使用できます。 この圧縮がどのように機能するかについての詳細は、TimescaleDBこの圧縮に関する記事を参照してください。

まず、ハイパーテーブルの圧縮を有効にします。

  1. ALTER TABLE conditions SET (
  2. timescaledb.compress,
  3. timescaledb.compress_segmentby = 'device_id'
  4. );

次の出力が表示されます。

Output
NOTICE: adding index _compressed_hypertable_2_device_id__ts_meta_sequence_num_idx ON _timescaledb_internal._compressed_hypertable_2 USING BTREE(device_id, _ts_meta_sequence_num) ALTER TABLE

注:指定した期間のデータを圧縮するようにTimescaleDBを設定することもできます。 たとえば、次のように実行できます。

  1. SELECT add_compress_chunks_policy('conditions', INTERVAL '7 days');

この例では、データは1週間後に自動的に圧縮されます。

次のコマンドを使用して、圧縮データの統計を確認できます。

  1. SELECT * FROM timescaledb_information.compressed_chunk_stats;

次に、チャンクとそのステータスのリストが表示されます。圧縮ステータスと、非圧縮データと圧縮データが占めるスペースの量(バイト単位)です。

データを長期間保存する必要がない場合は、古いデータを削除して、さらに多くのスペースを解放できます。 このための特別なdrop_chunks関数があります。 これにより、指定した時間より古いデータを含むチャンクを削除できます。

  1. SELECT drop_chunks(interval '24 hours', 'conditions');

このクエリは、1日前より古いデータのみを含むハイパーテーブルconditionsからすべてのチャンクを削除します。

次の出力が表示されます。

Output
drop_chunks ---------------------------------------- _timescaledb_internal._hyper_1_2_chunk (1 row)

古いデータを自動的に削除するには、cronタスクを構成できます。 cronを使用してさまざまなシステムタスクを自動化する方法の詳細については、チュートリアルを参照してください。

データベースを終了します。

  1. \q

次に、シェルから実行する必要がある次のコマンドを使用して、crontabを編集します。

  1. sudo crontab -e

次に、ファイルの最後に次の行を追加します。

crontab
...

0 1 * * * /usr/bin/psql -h localhost -p 5432 -U postgres -d postgres -c "SELECT drop_chunks(interval '24 hours', 'conditions');" >/dev/null 2>&1

このジョブは、毎日午前1時に1日より古い古いデータを削除します。

結論

これで、Ubuntu20.04サーバーにTimescaleDBがセットアップされました。 また、ハイパーテーブルの作成、データの挿入、データのクエリ、データの圧縮、不要なレコードの削除も試してみました。 これらの例を使用すると、時系列データを格納するための従来のリレーショナルデータベース管理システムに対するTimescaleDBの主な利点を利用できます。

  • より高いデータ取り込み率
  • クエリパフォーマンスの高速化
  • 時間指向の機能

時系列データの保存方法がわかったので、そのデータを使用してグラフを作成できます。 TimescaleDBは、GrafanaなどのPostgreSQLで動作する視覚化ツールと互換性があります。 Ubuntu 20.04チュートリアルにGrafanaをインストールして保護する方法を使用して、この人気のある視覚化ツールの詳細を学ぶことができます。 データベースについて詳しく知りたい場合は、データベースのトピックページをご覧ください。