序章

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

2019-11-01 09:00:00    server.cpu.1    0.9
2019-11-01 09:00:00    server.cpu.15   0.8
2019-11-01 09:01:00    server.cpu.1    0.9
2019-11-01 09:01:00    server.cpu.15   0.8
...

モノのインターネット(IoT)および産業用モノのインターネットの台頭により、時系列データの管理は不可欠なスキルになりました。 さまざまな時系列情報を収集するデバイスはますます増えています。たとえば、フィットネストラッカー、スマートウォッチ、自宅の気象観測所、さまざまなセンサーなどです。 これらのデバイスは多くの情報を収集するため、このデータはすべてどこかに保存する必要があります。

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

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

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

前提条件

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

  • Ubuntu 18.04の初期サーバーセットアップガイドに従ってセットアップされた1つのUbuntu18.04サーバー。これには、sudo権限を持つroot以外のユーザーとファイアウォールが含まれます。
  • サーバーにPostgreSQLがインストールされています。 Ubuntu18.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バージョン10を使用します。 別のバージョンのPostgreSQL(たとえば、11または9.6)を使用している場合は、次のコマンドの値を置き換えて実行します。

  1. sudo apt install timescaledb-postgresql-10

これで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/10/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.backup201911181111

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

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 そのリストへのモジュール。

注:によって指定されたライブラリの場合 shared_preload_libraries が見つからない場合、データベースサーバーは起動に失敗します。 を利用するアプリケーションをデバッグするときは、このことに注意してください。 shared_preload_libraries. 詳細については、shared_preload_librariesに関するこのPostgresqlCO.NFの記事を参照してください。

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

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 10 Memory settings recommendations Current: shared_buffers = 128MB #effective_cache_size = 4GB #maintenance_work_mem = 64MB #work_mem = 4MB Recommended: shared_buffers = 1994MB effective_cache_size = 5982MB maintenance_work_mem = 1021001kB work_mem = 5105kB Is this okay? [(y)es/(s)kip/(q)uit]:

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

PostgreSQLのメモリ設定を調整するプロセスの詳細については、PostgreSQLwikiPostgreSQLサーバーの調整に関する記事を参照してください。

入る y 値を受け入れるには:

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

この時点で、サーバーに複数のCPUがある場合は、並列処理設定の推奨事項が見つかります。 これらの設定は、複数のCPUがデータベースをスキャンして要求されたデータをより迅速に返すために並行してクエリを実行する方法を決定します。

複数の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 = 13 max_parallel_workers_per_gather = 1 max_parallel_workers = 2 Is this okay? [(y)es/(s)kip/(q)uit]:

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

タイプ y それから ENTER これらの設定を受け入れるには:

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 #max_wal_size = 1GB Recommended: wal_buffers = 16MB min_wal_size = 4GB max_wal_size = 8GB Is this okay? [(y)es/(s)kip/(q)uit]:

WALは、データベースに変更が加えられる前にPostgreSQLがデータファイルへの変更をログに記録するログ方法です。 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のドキュメントを参照してください。

プレス y それから ENTER 続ける。

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

その結果、次の場所で既製の構成ファイルを取得できます。 /etc/postgresql/10/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の拡張として実装されているため、時系列データを使用した操作はリレーショナルデータ操作と大差ありません。 同時に、データベースを使用すると、将来、時系列テーブルとリレーショナルテーブルのデータを自由に組み合わせることができます。

これを示すために、PostgreSQLコマンドを使用してデータベースを作成し、TimescaleDB拡張機能を有効にして hypertable を作成します。これは、多くの個々のテーブルの高レベルの抽象化です。 ハイパーテーブルは、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.5.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

前述のように、時系列データとの主な相互作用ポイントはハイパーテーブルです。ハイパーテーブルは、チャンクと呼ばれるデータを保持する多数の個別のテーブルで構成されます。

ハイパーテーブルを作成するには、通常の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. );

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

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

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

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

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

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

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

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

まず、基本的なコマンドを試してください。 標準を使用してハイパーテーブルにデータを挿入できます INSERT SQLコマンド。 サンプルを挿入します temperaturehumidity 理論上のデバイスのデータ weather-pro-000000 次のコマンドを使用します。

  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

また、 INSERT コマンドは、を使用して挿入されたデータの一部またはすべてを返します RETURNING 声明:

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

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

Output
time | device_id | temperature | humidity -------------------------------+--------------------+-------------+---------- 2019-09-15 14:14:01.576651+00 | weather-pro-000002 | 70.1 | 50.1 (1 row)

ハイパーテーブルからデータを削除する場合は、標準を使用します DELETE SQLコマンド。 次のコマンドを実行して、データに含まれるデータをすべて削除します。 temperature よりも高い 80 または humidity よりも高い 50:

  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コマンドを使用できます。 たとえば、からの最後の10エントリを表示するには conditions ハイパーテーブルの場合は、次のコマンドを実行します。

  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;

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

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.5 (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;

ここでは、 time_bucket 関数。PostgreSQLdate_trunc関数のより強力なバージョンとして機能します。 その結果、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 *
  2. FROM timescaledb_information.compressed_chunk_stats;

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

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

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

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

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

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

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

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

  1. \q

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

  1. 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日より古い古いデータを削除します。

結論

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

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

時系列データの保存方法がわかったので、そのデータを使用してグラフを作成できます。 TimescaleDBは、GrafanaなどのPostgreSQLで動作する視覚化ツールと互換性があります。 Ubuntu 18.04チュートリアルにGrafanaをインストールして保護する方法を使用して、この人気のある視覚化ツールの詳細を学ぶことができます。