時系列データベース概要
データレイクの保存層は、産業用時系列ワークロードに最適化したAster TSDB(apache-cassandra-timeseries)
です。Apache Cassandra cassandra-6.0 の社内フォークであり、CQL構文とディスクフォーマットは
アップストリームと同一です — 既存の6.0データをそのまま読み込み、新機能はすべて有効化することで動作します。
名前が似ているため最も混同されやすいポイントです。格納するものが異なります。
| 時系列データベース (本ドキュメント) | 時系列エンジン (TSE) | |
|---|---|---|
| 何を格納するか | センサー値 — 現場から収集されたタグポイント(pp.tm_tag_point) | メトリクス — PLANTPULSE.JMX.* · PLANTPULSE.EDGE.* のようなシステム自身の指標 |
| 性質 | 汎用時系列データベース | メトリクス専用 |
| ポート | 9042 (CQL) | 7800(平文) · 7801(TLS) |
| クエリ | CQL — time_bucket_gapfill のような組み込み関数 | TQL |
| ドキュメント | 本節 | 時系列エンジン |
「設備の温度はどうだったか」はこちら、「昨日の収集器の処理件数は?」はエンジンです。
エンジンも結局は同じ Aster TSDB リングに書き込みますが、キースペースとスキーマが異なるため、エンジンに投入した メトリクスは CQL でタグテーブルを検索しても見つかりません。
何が向上するか
現場の時系列には固有の性質があります。タグごとに秒単位で無限に蓄積され、規制により数年間の 保持が必要であり、通信が切断されていたエッジが数日分を一括でプッシュし(遅延書き込み)、クエリはほぼ常に 「このタグ、この期間」です。標準の Cassandra でも実現できますが、圧縮・保存・集計がすべてアプリケーション 側の負担として残ります。このフォークはその負担をデータベース内に移します。
| やりたいこと | このデータベースが行うこと | ドキュメント |
|---|---|---|
| バケット・集計・補間をサーバー側で完結させる | CQL関数21個 + ギャップフィル | 時系列関数 |
| 古いデータを自動的に圧縮する | 階層型ストレージ — クエリはそのまま | 階層型ストレージ |
| 保存期間を過ぎたら一括削除する | 時系列コンパクション(TSCS) | 時系列コンパクション |
| ログ・イベント本文を部分文字列で検索する | 全文検索 — 韓国語対応 | 全文検索 |
3つを一緒に有効化すると
쓰기 ──▶ [ 핫 구간 ] 최근 데이터. 평소대로 행으로 저장·질의
│
│ hot_window 를 지나면 (계층형 저장)
▼
[ 콜드 청크 ] 컬럼 지향으로 압축. SELECT 가 알아서 합쳐 읽는다
│
│ cold_window / retention 이 지나면
▼
통째로 삭제 컴팩션 없이 창 단위로 (TSCS)
TSCS と階層型ストレージは互いに独立です。片方だけでも有効化でき、リスクが低いのは TSCS を先に 有効化することです。
実測 — 運用テーブルの形状、2,000万行
tm_tag_point(一般カラム8個)、234番ホスト、チャンクフォーマット v4 基準です。
| 項目 | 階層化前 | 階層化後 | 効果 |
|---|---|---|---|
| 保存容量 | 237.8 MB | 33.3 MB | 7.1倍削減 (行あたり 11.9 → 約1.7バイト) |
count(*) (4万行パーティション) | 303 ms | 50 ms | 6.1倍高速 |
time_bucket + 集計 | 150~270 ms | 31~64 ms | 3~6倍高速 |
| ギャップフィル(locf · interpolate) | 162~284 ms | 30~53 ms | 5.4倍高速 |
| タグ90個の時間別平均(360万行) | 14.9 s | 4.2 s | 3.5倍高速 |
通常、圧縮は容量と引き換えに速度を犠牲にするトレードオフですが、ここでは測定したクエリはすべて同等以上に高速化しました —
読み取るバイト数が減るためです。範囲指定のないスキャンでも、ウィンドウをクエリ順に一つずつ展開し、LIMIT が
満たされると停止するため、遅くなることはありません。
- パーティションキーなしの全スキャン集計は、階層化されたテーブルでは誤った値を返します。その経路では チャンクをマージしません。
- 容量削減はテーブルの形状に依存します。 定数カラムも全NULLカラムもない最小形状
(高エントロピー
doubleのみ)では、上記の数値は該当しません。自テーブルで再測定して判断してください。
設置場所
$PP_HOME/plantpulse-storage/db/cassandra の下の apache-cassandra-timeseries-<version>.jar に
入ります。稼働中プロセスのバージョンは以下のように確認します。
docker exec plantpulse-datalake nodetool version
バージョン・出所・更新手順はオペレーター向けドキュメントのため、本マニュアルには含まれません。
関連ドキュメント
| やりたいこと | ドキュメント |
|---|---|
| バケット・ギャップフィル・補間を使う | 時系列関数 |
| 古い値を低コストな場所へ移す | 階層型ストレージ |
| コンパクションを理解する | 時系列コンパクション (TSCS) |
| 本文を検索する | 全文検索 |
| CQL で直接クエリする | データクエリ |
メトリクス(システム指標)を探しているなら、ここではありません → 時系列エンジン