メインコンテンツまでスキップ

時系列データベース概要

データレイクの保存層は、産業用時系列ワークロードに最適化したAster TSDB(apache-cassandra-timeseries) です。Apache Cassandra cassandra-6.0 の社内フォークであり、CQL構文とディスクフォーマットは アップストリームと同一です — 既存の6.0データをそのまま読み込み、新機能はすべて有効化することで動作します。

「時系列エンジン(TSE)」とは«別物»です

名前が似ているため最も混同されやすいポイントです。格納するものが異なります。

時系列データベース (本ドキュメント)時系列エンジン (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 MB33.3 MB7.1倍削減 (行あたり 11.9 → 約1.7バイト)
count(*) (4万行パーティション)303 ms50 ms6.1倍高速
time_bucket + 集計150~270 ms31~64 ms3~6倍高速
ギャップフィル(locf · interpolate)162~284 ms30~53 ms5.4倍高速
タグ90個の時間別平均(360万行)14.9 s4.2 s3.5倍高速
圧縮によりクエリも高速化されます

通常、圧縮は容量と引き換えに速度を犠牲にするトレードオフですが、ここでは測定したクエリはすべて同等以上に高速化しました — 読み取るバイト数が減るためです。範囲指定のないスキャンでも、ウィンドウをクエリ順に一つずつ展開し、LIMIT が 満たされると停止するため、遅くなることはありません。

2つの注意点
  • パーティションキーなしの全スキャン集計は、階層化されたテーブルでは誤った値を返します。その経路では チャンクをマージしません。
  • 容量削減はテーブルの形状に依存します。 定数カラムも全NULLカラムもない最小形状 (高エントロピー double のみ)では、上記の数値は該当しません。自テーブルで再測定して判断してください。

設置場所​

$PP_HOME/plantpulse-storage/db/cassandra の下の apache-cassandra-timeseries-<version>.jar に 入ります。稼働中プロセスのバージョンは以下のように確認します。

docker exec plantpulse-datalake nodetool version

バージョン・出所・更新手順はオペレーター向けドキュメントのため、本マニュアルには含まれません。


関連ドキュメント​

やりたいことドキュメント
バケット・ギャップフィル・補間を使う時系列関数
古い値を低コストな場所へ移す階層型ストレージ
コンパクションを理解する時系列コンパクション (TSCS)
本文を検索する全文検索
CQL で直接クエリするデータクエリ

メトリクス(システム指標)を探しているなら、ここではありません → 時系列エンジン