時系列データベース
タイムスタンプ付きのデータを効率的に保存・クエリするために最適化されたデータベース
データベースオブザーバビリティ
時系列データベースとは
時系列データベース (Time Series Database, TSDB) は、タイムスタンプ付きのデータ (メトリクス、ログ、IoT センサーデータ) を効率的に保存・クエリするために最適化されたデータベースである。時間範囲での集計、ダウンサンプリング、データの自動削除に特化している。
RDB との違い
| 観点 | RDB (PostgreSQL) | TSDB (Timestream) |
|---|---|---|
| データモデル | テーブル + 行 | メトリクス + タイムスタンプ |
| 書き込み | ランダム | 追記のみ (Append-Only) |
| クエリ | 任意の条件 | 時間範囲 + 集計 |
| 更新 | 頻繁 | ほぼなし (イミュータブル) |
| 圧縮 | 汎用 | 時系列に特化 (高圧縮) |
| 自動削除 | 手動 | TTL で自動 |
主要な TSDB
AWS マネージドでサーバーレスの Amazon Timestream、OSS で広く普及している InfluxDB、Kubernetes モニタリングの標準である Prometheus、PostgreSQL 拡張の TimescaleDB が代表的。
Amazon Timestream
// データの書き込み
await timestream.writeRecords({
DatabaseName: 'metrics',
TableName: 'cpu',
Records: [{
Dimensions: [{ Name: 'host', Value: 'web-1' }],
MeasureName: 'cpu_usage',
MeasureValue: '72.5',
MeasureValueType: 'DOUBLE',
Time: Date.now().toString(),
TimeUnit: 'MILLISECONDS',
}],
});
// クエリ (直近1時間の平均CPU使用率)
const result = await timestream.query({
QueryString: `
SELECT host, AVG(measure_value::double) as avg_cpu
FROM metrics.cpu
WHERE time > ago(1h)
GROUP BY host
`,
});
AWS リソースのモニタリングは CloudWatch、カスタムメトリクスの分析は Timestream が適している。CloudWatch はメトリクス名と統計でクエリし保持期間は 15 ヶ月 (解像度低下)、Timestream は SQL ライクなクエリで保持期間を自由に設定できる。コストは CloudWatch がメトリクス数課金、Timestream が書き込み + クエリ課金。
ユースケース
インフラモニタリング (CPU 使用率、メモリ、ディスク I/O)、アプリケーションメトリクス (レスポンスタイム、エラー率)、IoT (温度、湿度、位置情報)、金融 (株価、為替レート) が代表的な用途。
ダウンサンプリング
古いデータの解像度を下げてストレージを節約する。
直近 1 時間: 1 秒ごとのデータ
直近 1 日: 1 分ごとの平均
直近 1 ヶ月: 1 時間ごとの平均
直近 1 年: 1 日ごとの平均
時系列データベースを扱う関連書籍も多い。