ヒトリ歩き

愚痴とかいろいろ書きます

TimescaleDBのセットアップ

時系列DBのことを知りたくて、TimescaleDBのコンテナを使ってサクッとセットアップ。

時系列DBとは

時間情報を持ったデータを格納し、最適化したデータベース。   TimescaleDBはその中の1つ。詳細は参考の資料を参照。

https://www.sraoss.co.jp/wp-content/uploads/files/event_seminar/material/2021/timescaledb-intro-20210624.pdf

セットアップ

インストール

本体をインストールしたくないので、コンテナで起動する。
パスワードを設定したい場合、POSTGRES_PASSWORD環境変数に設定する。ここはPostgreSQLと一緒。

docker pull timescale/timescaledb-ha:pg16
docker run -d --name timescaledb -p 5432:5432 -e POSTGRES_PASSWORD=example timescale/timescaledb-ha:pg16
docker exec -it timescaledb psql -U postgres

docs.timescale.com

ハイパーテーブルの作成

TimescaleDBの紹介資料を参照して、ハイパーテーブルを作成する。 通常のテーブルを作成して、create_hypertable関数を実行。
サーバのCPU使用率、メモリ使用率の情報をもつsserverspecテーブルを作成。

  • テーブルの作成
CREATE TABLE serverspec (
    time timestamp NOT NULL,
    servername text NOT NULL,
    cpu_userd double precision,
    memory_used double precision
);
  • create_hypertable関数の実行

create_hypertable関数には、ハイパーテーブルに変換するテーブル名、分割の条件にする時間の列名を指定する。
戻り値は、ハイパーテーブルのID、スキーマ名、テーブル名。

SELECT create_hypertable('serverspec', 'time');
WARNING:  column type "timestamp without time zone" used for "time" does not follow best practices
HINT:  Use datatype TIMESTAMPTZ instead.
    create_hypertable    
-------------------------
 (1,public,serverspec,t)

データの操作

実際にデータの挿入、検索、更新、削除をする。

  • 挿入
INSERT INTO serverspec VALUES ('2024-02-18 21:00:00', 'server1', 19.4, 10.4);
INSERT 0 1
  • 検索
SELECT * FROM serverspec;
        time         | servername | cpu_userd | memory_used 
---------------------+------------+-----------+-------------
 2024-02-18 21:00:00 | server1    |      19.4 |        10.4
(1 row)
  • 更新
UPDATE serverspec SET cpu_userd = cpu_userd + 0.1 WHERE time = '2024-02-18 21:00:00' and servername = 'server1
';
UPDATE 1
select * from serverspec;
        time         | servername | cpu_userd | memory_used 
---------------------+------------+-----------+-------------
 2024-02-18 21:00:00 | server1    |      19.5 |        10.4
(1 row)
  • 削除
DELETE FROM serverspec WHERE time = '2024-02-18 21:00:00' and servername = 'server1';

最後に

TimescaleDBのインストールとデータの投入、更新、削除までやってみたが、PostgreSQLなので簡単だった。
ここから、チャンクとか時系列DBとして大事な概念が出てくるので、引き続き確認していく。