반응형

 

시계열 데이터베이스(TSDB)

 

시계열 데이터(Time series data)란 시간이 흐름에 따라 발생하는 데이터를 의미합니다. 예를 들면 시간이 흐름에 따라 변하는 온도, 풍향 같은 기후 데이터나 주가 데이터 등이 시계열 데이터입니다. 시계열 데이터는 기본적으로 데이터의 양이 방대하고 끊임없이 증가합니다. 기록되는 각각의 데이터들은 시간 종속성을 가진다는 특성도 있습니다. 관계형 데이터베이스(RDB)나 다른 NoSQL로는 이러한 시계열 데이터를 다루기에 큰 불편함이 있기 때문에 시계열 데이터베이스가 따로 생기게 되었습니다.

 

시계열 데이터베이스(TSDB)는 시계열 데이터를 효율적으로 다루기위해 고안된 데이터베이스입니다. 시간이 흐름에 따라 많은 양의 데이터가 끊임없이 쌓이기 때문에 쓰기 성능에 최적화가 되어있습니다. RDB는 인덱스가 걸려있으면 데이터의 양이 커질수록 쓰기 성능은 점점 저하되지만 TSDB의 인덱스는 이런 경우에도 성능이 떨어지지 않도록 만들어졌습니다. TSDB는 시간에 따라 저장공간을 분리하고 시간으로 쿼리를 할 수 있습니다.

 

TSDB는 쓰기와 조회에 대해서는 고도의 최적화를 했습니다. 반면 업데이트와 삭제에 대한 성능은 포기할 수밖에 없습니다. 하지만 이것은 그리 큰 문제가 되지 않습니다.

시계열 데이터의 특징은 일단 시간에 따른 데이터가 발생하면 그 데이터가 변경되는 일은 없다는 것입니다. 예를 들어 오늘 오후 1시 서울의 온도가 섭씨 30도였으면 그 사실은 시간이 지나도 변하지 않습니다. 오늘 삼성전자의 주가가 5만원이었다는 사실이 내일 변하지 않습니다. 이러한 특성으로 인해 시계열 데이터는 변경되거나 삭제될 일이 거의 없습니다.

 

 

 

influxDB 소개

 

https://www.influxdata.com/

 

InfluxDB: Open Source Time Series Database | InfluxData

InfluxDB is the platform for building & operating time series applications. Monitor metrics & events, get real-time visibility into stacks, sensors & systems.

www.influxdata.com

 

influxDB는 대표적인 TSDB중 하나입니다. 사용하기 쉽고 인기가 많으며 지속적으로 업데이트가 되고 있습니다. 다양한 플러그인과 툴을 제공하며 그 모든 것들에 대한 문서도 잘 정리되어있습니다. influxDB Cloud도 있기 때문에 클라우드를 사용할 수도 있습니다. 다만 현재 기준으로 클라우드 로케이션이 북미, 유럽, 호주에만 존재한다는 아쉬운 제약이 있습니다.

 

influxDB는 내부적으로 Go언어로 만들었습니다. 오픈소스이고 설치와 사용이 편리합니다. Http api와 각종 프로그래밍 언어에서 편리하게 사용할 수 있는 influx client를 제공합니다. 

 

모델링 면에서는 MongoDB처럼 스키마를 따로 정의하지 않습니다.

쿼리 면에서는 sql과 비슷한 쿼리언어를 제공합니다. 또한 자동으로 집계 데이터를 계산하는 연속 쿼리는 자주 집계 쿼리를 사용하는 것보다 편리함을 줍니다.

Metrics와 Events를 수집하고 리포팅하는 Telegraf, Real-time 스트리밍 데이터 전송 엔진인 Kapacitor, 각종 시각화를 해주는 툴인 Chronograf 등 수많은 유용한 플러그인들을 제공하고 있으며 이에 대한 사용법이나 튜토리얼도 문서화가 잘되어있습니다.

 

 

 

influxDB의 구조

 

관게형 데이터베이스(RDB)에 비유하여 influxDB의 구조를 설명합니다.

 

RDB influxDB
database bucket
table measurement
column key
PK or indexed column tag key
unindexed column field key
record point

 

참고로 bucket은 database와 데이터 보존 기간 정책인 retention policy가 합쳐진 개념입니다.

보존 기간이 지나면 데이터는 자동으로 삭제됩니다.

 

 

* 예시 - 한국의 기후

 

예시 데이터에서 입력된 값들은 제가 임의로 작성해본 값이며, 실제 데이터는 아닙니다.

 

bucket - korea

measurement - climate(기후)

tag key - region(지역)

field key - temperature(온도), wind_direction(풍향), wind_speed(풍속), humidity(습도)

 

- point example

time region temperature wind_direction wind_speed humidity
2022-11-11T12:00:00Z Seoul 19 45 20 10

 

- measurement data exmaple

time region temperature wind_direction wind_speed humidity
2022-11-11T12:00:00Z Seoul 19 45 20 10
2022-11-11T12:00:00Z Busan 20 70 34 5
2022-11-11T12:01:00Z Seoul 19 46 22 10
2022-11-11T12:01:00Z Busan 21 70 31 4

 

- region == Seoul로 필터 조회해서 뽑은 time series

time temperature wind_direction wind_speed humidity
2022-11-11T12:00:00Z 19 45 20 10
2022-11-11T12:01:00Z 19 46 22 10

 

보통 이렇게 카테고라이징이 필요한 key를 tag key로 설정합니다.

 

쿼리문은 flux라는 언어로 작성하며 바로 위 예시의 쿼리문은 다음과 같습니다.

from(bucket:"korea")
    |> range(start: 2022-11-11T12:00:00Z, stop: 2022-11-11T12:01:00Z)
    |> filter(fn:(r) => r._measurement == "climate")
    |> filter(fn:(r) => r.region == "Seoul")

 

 

 

influxDB 설치

 

다음 공식 홈페이지 링크는 mac os, linux, windows, docker, kubernetes, raspberry pi에서 설치법을 안내하고 있습니다. (참고로 influxDB 버전이 바뀌면 링크 주소가 달라집니다. 시간이 지나면 링크가 안맞을테니 이점 양해 바랍니다. 앞으로 나올 다른 링크들도 마찬가지입니다.)

 

https://docs.influxdata.com/influxdb/v2.5/install/

 

Install InfluxDB | InfluxDB OSS 2.4 Documentation

Thank you for your feedback! Let us know what we can do better:

docs.influxdata.com

 

윈도우 기준으로 설치 순서는 influxDB와 CLI를 다운로드 받아 설치하고, DB를 setup합니다.

 

https://docs.influxdata.com/influxdb/v2.5/install/?t=CLI+Setup#set-up-influxdb 

 

Install InfluxDB | InfluxDB OSS 2.5 Documentation

Thank you for your feedback! Let us know what we can do better:

docs.influxdata.com

 

위 가이드대로 따라하여 DB를 setup하면 config, org, user, bucket, token이 생성됩니다. 그러면 이제부터 influxDB에 본격적으로 데이터를 쓰고 조회하는 것이 가능합니다.

 

 

 

데이터베이스 서버 실행법

 

influxDB를 잘 설치했다면 윈도우 기준으로 "C:\Program Files\InfluxData" 경로에 설치가 되었을 것입니다. 터미널을 하나 실행시키고 "C:\Program Files\InfluxData\influxdb" 경로에 진입 후 다음 명령어를 입력하면 서버가 실행됩니다.

 

influxd

 

서버를 실행했다면 cli를 사용할 수 있습니다. 터미널 탭을 하나 더 열어서 "C:\Program Files\InfluxData\influx" 경로에 진입 후 cli를 사용할 수 있습니다. 

 

cli 인터페이스 reference

https://docs.influxdata.com/influxdb/v2.5/reference/cli/influx/

 

influx - InfluxDB command line interface | InfluxDB OSS 2.5 Documentation

Thank you for your feedback! Let us know what we can do better:

docs.influxdata.com

 

 

 

보안

 

influxDB의 클라이언트와 서버는 http로 통신합니다. https를 사용하기 위해 TSL가 필요합니다. influxDB에 TSL를 사용하는 방법은 아래 링크에 가이드되어있습니다.

 

https://docs.influxdata.com/influxdb/v2.5/security/enable-tls/

 

Enable TLS/SSL encryption | InfluxDB OSS 2.5 Documentation

Thank you for your feedback! Let us know what we can do better:

docs.influxdata.com

 

DB에 대한 접근 권한별 토큰 설정 방법은 여기에 있습니다.

 

https://docs.influxdata.com/influxdb/v2.5/security/tokens/

 

Manage API tokens in InfluxDB | InfluxDB OSS 2.5 Documentation

Thank you for your feedback! Let us know what we can do better:

docs.influxdata.com

 

 

 

GUI 모니터링 툴 사용하기

 

influxDB를 모니터링할 수 있는 툴은 웹으로 제공됩니다. localhost:8086에 접속하면 다음과 같이 생긴 웹페이지를 만날 수 있습니다.

 

influxDB GUI

 

여기서는 대시보드, 쿼리, 데이터 시각화, 태스크, 알림 등 다양한 기능들을 GUI로 다룰 수 있습니다.

 

데이터 시각화 예시 이미지

 

 

 

Shard와 Shard group

 

아까 influxDB의 구조를 RDB에 비유하여 설명할 때, bucket을 database에 보존 기간 정책(retention policy)이 합쳐진 개념이라고 했는데, 이 보존 기간 정책은 shard group duration과 연결됩니다. 즉, bucket을 생성하면 shard group duration도 설정됩니다. 또한 retention policy를 변경하면 shard group duration도 변경됩니다.

 

retention policy와 shard group duration는 연결되어있다.

 

shard group은 shard를 담고 있으며 shard는 여러 개의 series를 담고 있습니다. 시간이 shard group duration만큼 지나면 shard group은 메모리에서 디스크로 옮겨집니다. 이런 방식으로 시간이 지나도 메모리에 적재되는 데이터의 양을 제한할 수 있으며 처리량을 통제할 수 있습니다.

 

retention policy를 설정하는 방법은 아래 링크에 가이드되어있습니다.

https://docs.influxdata.com/influxdb/v2.5/organizations/buckets/create-bucket/

 

Create a bucket in InfluxDB | InfluxDB OSS 2.5 Documentation

Thank you for your feedback! Let us know what we can do better:

docs.influxdata.com

 

 

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기