Time series

Time series (Time series)

온도 센서, 주식 가격, 서버 지표처럼 시간과 함께 수집되는 수치 데이터를 다룰 때는 Time series(시계열) 데이터 타입이 제격이에요. Redis의 time series 타입을 쓰면 데이터 포인트를 시간과 함께 저장하고, 시간·값 범위로 질의하거나 집계 함수까지 계산할 수 있어요.

출처: Redis 공식 문서 — Time series

Time series란?

Redis의 time series 데이터 타입은 실수(real-valued) 데이터 포인트를 수집된 시간과 함께 저장하게 해줘요. 여러 시계열에서 값을 조합해 시간 범위나 값 범위로 질의할 수도 있고, 일정 기간 동안의 집계 함수(aggregate functions) 를 계산해 그 결과로 새로운 시계열을 만들 수도 있어요.

시계열 만들기 (Create a time series)

먼저 시계열을 하나 만들어 볼게요.

import redis
r = redis.Redis(decode_responses=True)
res1 = r.ts().create("thermometer:1")
print(res1)  # >>> True
res2 = r.type("thermometer:1")
print(res2)  # >>> TSDB-TYPE

ts().create()로 시계열을 만들면, TYPE 명령 결과가 TSDB-TYPE으로 나오는 걸 확인할 수 있어요. 즉 요즘 Redis에서는 Time series가 Redis Stack의 일부로 제공되기 때문에, 전용 타입으로 인식된다는 뜻이에요.

데이터 추가 (Add data)

시계열에 데이터를 추가하는 기본 흐름이에요. 각 데이터 포인트는 (타임스탬프, 값) 쌍으로 저장되고, 라벨(label)로 시계열에 메타데이터를 붙일 수 있어요. 예를 들어 센서 위치나 종류 같은 것을 라벨로 달 수 있죠.

// Go 예시 (라벨 조회)
fmt.Println(res7["labels"])  // >>> map[location:UK type:Mercury]

집계 (Aggregation)

시계열의 핵심 기능 중 하나가 집계예요. 데이터를 시간 버킷(bucket)으로 나눠 최소값, 최대값, 평균, 합계 등을 계산할 수 있어요. 예를 들어 "1초 단위로 min 값을 계산해 컴팩트한 시계열로 만들기" 같은 규칙(compaction rule)을 설정할 수 있어요.

규칙 계산 방식에 따라, 아직 데이터가 충분히 채워지지 않은 버킷에서는 집계 결과가 생기지 않을 수 있어요. 예를 들어 두 번째 버킷에 시간 4의 데이터가 추가될 때, 컴팩션 규칙이 첫 번째 버킷의 최소값을 계산해 컴팩트한 시계열에 추가해요.

시각화 도구

Time series 데이터는 아래 같은 도구로 시각화할 수 있어요.

  1. Grafana 7.1+Redis Data Source 플러그인 사용

더 알아보기 (Learn more)