시계열 데이터베이스 개요
데이터레이크의 저장 계층은 산업 시계열 워크로드에 최적화한 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) | 시계열 컴팩션 |
| 로그·이벤트 본문을 부분 문자열로 찾는다 | 전문 검색 — 한국어 포함 | 전문 검색 |
세 가지를 함께 켜면
쓰기 ──▶ [ 핫 구간 ] 최근 데이터. 평소대로 행으로 저장·질의
│
│ hot_window 를 지나면 (계층형 저장)
▼
[ 콜드 청크 ] 컬럼 지향으로 압축. SELECT 가 알아서 합쳐 읽는다
│
│ cold_window / retention 이 지나면
▼
통째로 삭제 컴팩션 없이 창 단위로 (TSCS)
TSCS 와 계층형 저장은 서로 독립입니다. 하나만 켜도 되고, 위험이 낮은 쪽은 TSCS 를 먼저 켜는 것입니다.
실측 — 운영 테이블 모양, 2천만 행
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-<버전>.jar 로
들어갑니다. 도는 프로세스의 버전은 이렇게 확인합니다.
docker exec plantpulse-datalake nodetool version
버전 · 출처 · 갱신 절차는 운영자용 문서라 이 매뉴얼에 없습니다.
더 볼 것
| 하려는 일 | 문서 |
|---|---|
| 버킷·갭필·보간을 쓴다 | 시계열 함수 |
| 오래된 값을 싼 곳으로 내린다 | 계층형 저장 |
| 컴팩션을 이해한다 | 시계열 컴팩션 (TSCS) |
| 본문을 검색한다 | 전문 검색 |
| CQL 로 직접 질의한다 | 데이터 쿼리 |
메트릭(시스템 지표)을 찾고 있다면 여기가 아닙니다 → 시계열 엔진