時系列データベース(TSDB)は、タイムスタンプ付きのデータを効率的に格納・検索するために最適化されたデータベースです。IoTセンサーデータ、サーバーメトリクス、金融データ、アプリケーションログなど、時間の経過とともに蓄積されるデータの管理に特化しています。
汎用RDBでも時系列データを扱うことは可能ですが、書き込みスループット、データ圧縮、時間範囲クエリの効率において、TSDBは圧倒的なパフォーマンスを発揮します。DB-Enginesの調査では、時系列データベースは最も成長率の高いデータベースカテゴリとなっています。
InfluxDBはInfluxData社が開発する、最も人気のある時系列データベースの一つです。独自のストレージエンジンとクエリ言語を持ち、高い書き込みスループットが特徴です。
# InfluxDB 3.x - Python クライアントでのデータ書き込み
from influxdb_client_3 import InfluxDBClient3
import pandas as pd
client = InfluxDBClient3(
host="localhost",
token="my-token",
org="my-org",
database="metrics"
)
# Line Protocolでの書き込み
client.write(
"cpu,host=server01,region=tokyo usage_idle=72.5,usage_system=12.3 1709280000000000000"
)
# DataFrameでの書き込み
df = pd.DataFrame({
'time': pd.date_range('2026-03-01', periods=100, freq='1min'),
'temperature': [20 + i * 0.1 for i in range(100)],
'humidity': [60 + i * 0.05 for i in range(100)]
})
client.write(df, data_frame_measurement_name='environment')
InfluxDBの強みは、セットアップの容易さとエコシステムの充実です。Telegraf(データ収集)、Chronograf(可視化)、Kapacitor(アラート)からなるTICKスタックで、監視基盤を迅速に構築できます。
TimescaleDBはPostgreSQLの拡張として動作する時系列データベースです。SQLの完全互換性を保ちながら、時系列データに最適化されたパフォーマンスを提供します。
-- TimescaleDB - ハイパーテーブルの作成
CREATE TABLE metrics (
time TIMESTAMPTZ NOT NULL,
device_id TEXT NOT NULL,
temperature DOUBLE PRECISION,
humidity DOUBLE PRECISION
);
SELECT create_hypertable('metrics', by_range('time'));
-- 連続集約の設定
CREATE MATERIALIZED VIEW hourly_metrics
WITH (timescaledb.continuous) AS
SELECT
time_bucket('1 hour', time) AS bucket,
device_id,
AVG(temperature) AS avg_temp,
MAX(temperature) AS max_temp,
MIN(temperature) AS min_temp
FROM metrics
GROUP BY bucket, device_id;
-- 保持ポリシー(90日でデータ削除)
SELECT add_retention_policy('metrics', INTERVAL '90 days');
TimescaleDBの最大の利点は、PostgreSQLとの完全互換性です。既存のPostgreSQLの知識、ツール、ORMがそのまま使えるため、学習コストが低く、既存システムへの導入が容易です。JOINやサブクエリなどのSQLの全機能を時系列データに対して使用できます。
InfluxDBは専用のTSDBとして最適化されており、極めて高い書き込みスループットが必要なIoTシナリオに向いています。TimescaleDBは既にPostgreSQLを使用している環境や、時系列データと通常のリレーショナルデータを統合的に扱いたい場合に最適です。チームのSQL習熟度、既存のインフラ、データの複雑さを考慮して選定しましょう。