時系列DBのことを知りたくて、TimescaleDBのコンテナを使ってサクッとセットアップ。
時系列DBとは
時間情報を持ったデータを格納し、最適化したデータベース。 TimescaleDBはその中の1つ。詳細は参考の資料を参照。
セットアップ
インストール
本体をインストールしたくないので、コンテナで起動する。
パスワードを設定したい場合、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
ハイパーテーブルの作成
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として大事な概念が出てくるので、引き続き確認していく。