본문 바로가기

DB/이론

[ InfluxDB ] - Grafana

Influx DB란 많은 쓰기 작업과 쿼리 부하를 처리하기 위해 2013년에 Go언어로 개발된 오픈소스

Time Series Database(시계열 데이터베이스)로써 Tick Stack(Telegraf + InfluxDB + Chronograf

+ Kapacitor)의 필수 컴포넌트 중 하나이다. Influx DB는 많은 TSDB들 중에서 가장 유명하고, 

많이 사용되는 데이터베이스이다. Influx DB는 Distributed, Scale horizontally하게 설계되어 새로운

노드만 추가하면 손쉽게 scale-out할 수 있으며, RestFul API를 제공할 수 있어 API통신이 가능하다.

 

● 많은 쓰기 작업과 쿼리 부하를 처리하기 위해 2013년에 Go언어로 개발된 오픈소스 TSDB● Tick Stack의 필수 컴포넌트 중 하나● 가장 유명하고, 많이 사용되는 TSDB● Distributed, Scale horizontally하게 설계되어 scale-out이 쉬우며, Restful API를 제공하고 있어   API통신이 가능

 

특징

1) Continous Query(연속적인 쿼리), Task

시간에 따른 데이터(시계열 데이터)의 처리이다. InfluxDB는 데이터를 처리하여 새롭게 저장하는Down Sampling(다운 샘플링)을 일정 주기마다 실행되도록 하는 Continous Query(연속적인 쿼리)를제공하고 있다.

 

InfluxDB2에서는 Continous Query를 대체하는 Task를 제공하고 있다.

 

2) Retention Policy(보존 정책), Retention Period

Influx DB의 핵심 목적은 시간에 따른 데이터의 삽입과 조회이므로 직접 Delete를 이용하는 경우는 거의

없다. 하지만 데이터가 계속해서 쌓이면 저장 공간 및 처리 소곧 등에 문제가 생기므로 데이터를 자동으로

삭제해주는 Retention Policy(보존 정책)을 지원하고 있다.

일반적으로 1개의 데이터베이스는 여러 개의 보존 정책을 가지고 있다.

만약 별도의 설정을 하지 않았다면 autogen이라는 기본 정책으로 적용된다. autogen은 보존 기간이

무제한이므로, 별도의 설정을 해주지 않으면 데이터가 계속해서 쌓이고 문제를 일으키게 된다.

그러므로 별도의 설정을 해줌으로써 오래된 데이터들을 관리하는 작업이 필요하다.

 

InfluxDB2에서는 Retention Policy를 대체하는 Retention Period를 제공하고 있다.

 

[ InfluxDB 내부 구조 및 구성 ] vs [ RDB 내부 구조 및 구성 ]

 

Measurement ( Table )

시계열 데이터베이스에서 측정의 의미를 가지는 measurement는 관계형 데이터 베이스의 table에 해당하며,

RDB와 마찬가지로 하나의 데이터베이스 안에 여러 개의 measurement가 있을 수 있다.

하지만 RDB와 차별화된 핵심 컨셉이 있는데, InfluxDB는 NoSQL의 개념을 바탕으로 만들어져서 RDB와

다르게 Schemaless(스키마가 없음)하다는 점이다.

기존의 RDB로 개발을 할 때에는 필요한 컬럼들과 길이 및 타입 등을 설계하면서 테이블의 스키마를 구성해주어야

했다. 하지만 InfluxDB는 Schemaless 데이터베이스이므로, 새로운 데이터를 추가하는 시점에 Measurement와

관련 컬럼들이 추가되며 이러한 이유로 스키마의 변경이 매우 빠르다. InfluxDB는 이러한 구조를 가져감으로써

시계열 데이터에 유연하게 대처할 수 있도록 하였다.

 

Key(Tag Key, Field Key, Time Key)

컬럼의 구성은 기존의 RDB와 약간 차이가 있다. 기존의 RDB에서는 1개의 컬럼에 1개의 데이터가 저장되었는데,

TSDB에서는 컬럼이 3가지 종류로 나뉘어지며, 각각의 컬럼은(Key, Value)로 구성된다.

 

● Tag Key

   1) RDB에서 Indexed 컬럼과 유사하며, 인덱싱되어 Select문으로 조회하는 기준이 된다.

   2) Tag의 value로는 String 타입만 가능하므로 질의 시에 따옴표(' ')로 감싸주어야 한다.

 

● Field Key

   1) RDB에서 Indexed되지 않는 컬럼과 유사하며, 저정되는 데이터는 최소 1개 이상의 field가 있어야 한다.

   2) Field value는 Strings, floats, integer or Boolean 타입이 가능하며, 타입이 정해지면 변경할 수 없다.

 

● Time Key

    1) UTC를 기준으로 1970년 1월 1일 0시 0분 0초로부터 지난 시간을 microseconds 단위로 자동 입력된다.

    2) 수동으로 설정할 수도 있지만 권장하지 않는다.

 

→ Tag Key와 Field Key를 선택하는 기준은 간단하다 RDB와 마찬가지로 자주 조회하는 것은 Tag로

    단순 데이터인 경우에는 Field로 지정하면 된다. 만약 불필요한 데이터까지 모드 태그로 잡는다면

    인덱스 저장소(Index Structure)가 비대해져 메모리를 많이 사용하게 되고 처리 성능이 떨어지게 될

    것이다.

 

Series

Series는 InfluxDB에만 존재하는 개념으로 조합 가능한 Tag Key의 집합에 해당한다. 예를 들어 Member라는

Measurement에 이름, 나이가 Tag Key로 지정되어 있다면 저장된 모든 데이터들 중에서 가능한 (이름, 나이)의

집합이 Series이다.

 

Shard와 Shard Group

Shard Group은 InfluxDB bucket에 속하며 Shard Group Duration(샤드 그룹 보존 기간)에 따라

실제 데이터를 저장하는 Shard를 관리한다. Shard(샤드)에는 ShardGroup(샤드 그룹)에 정의된 기간에 속한

데이터들이 인코딩 및 압축되어 저장된다. 특히 Shard Group Duration에 저장된 모든 포인트(데이터)들은 동일한

샤드에 저장된다.

1개의 샤드는 여러 개의 Series, 디스크에 Time-Structured Merge Tree(TSM)으로 구성된다. TSM은 내부적

으로 사용되는 트리 기반의 데이터 저장소라고 생각하면 된다. 데이터가 TSM에 저장되기 전에는 메모리에 있는 것

이고, Shard Group Duration(샤드 그룹 보존 기간)이 만료되면 디스크에 TSM 형태로 저장되는 것이다.

influxDB는 Shard Group과 Shard를 이용해 데이터를 샤딩하여 데이터가 시간이 지남에 따라 증가하여도 처리량과

전체 성능을 높이는 접근 방법을 취한다. 샤드는 데이터에 대한 임시 블록을 가지고 있어 TSM에 매핑된다.

 

Shard Group Duration

Shard Group Duration(샤드 그룹 보존 기간)이란 각 샤드 그룹이 메모리에 보존되고, 새롭게 생성되는 기간을

의미한다. 만약 해당 보존 기간이 지나면 샤드 그룹은 제거된다. 기본적으로 InfluxDB는 버킷의 Retention Period에

따라 샤드 그룹 보존 기간을 설정한다. 만약 별도의 설정을 하지 않았다면 샤드 그룹 보존 기간은 기본적으로

7일이다.

 

 

Retention Period와 Shard Group Duration

Shard Group Duration은 데이터가 메모리에 상주해있는 시간이다.

만약 Shard Group Duration이 만료되면 해당 데이터는 메모리에서 디스크로 저장이 되는 것이다.

 

※ InfluxDB2.0

데이터 처리와 쿼리를 위한 새로운 질의 언어이다. FLUX는 시계열 데이터를 다루기 위해 설계되었으며

InfluxDB의 쿼리 언어로서 다양한 기능을 제공합니다.

 

1) 시계열 데이터 처리 : FLUX는 시계열 데이터를 직접 처리하고 분석하는 기능을 제공한다. 이는

시간에 따른 데이터의 흐름을 다루는데 유용하다.

 

2) 함수형 프로그래밍 : FLUX는 함수형 프로그래밍의 개념을 적극적으로 도입하여 데이터를 변환하고

조작할 수 있는 강력한 기능을 제공한다. 예를 들어, 맵(map), 필터(filter), 리듀스(reduce)와 같은 함수를

통해 데이터를 처리할 수 있다.

 

3) 유연한 데이터 모델 : FLUX는 다양한 데이터 형식과 소스에서 데이터를 읽고 쓸 수 있는 유연성을

제공한다. 이는 다양한 데이터 통합과 분석 시나리오에 적합하다.

 

4) 시스템 간 통합 : FLUX는 다른 데이터 시스템과의 통합을 지원하며, InfluxDB 외부의 데이터를

쿼리하고 처리할 수 있다.

 

5) SQL대체 : 기존의 InfluxQL 대신 FLUX가 권장되며, InfluxDB 2.0에서는 FLUX를 통해 데이터베스를

쿼리하고 처리하는 것이 일반적인 접근 방식이다.

※ Grafana

Grafana란 시계열 메트릭 데이터를 시각화하는데 대시보드를 제공해주는 오픈소스이다.

다양한 DB를 연결하여 DB의 데이터를 가져와 시각화 할 수 있으며, 그래프를 그리는 것도 간단히

마우스 클릭으로 완료할 수 있다.

 

시각화한 그래프에서 특정 수치 이상으로 값이 치솟을 때 알림을 전달받을 수 있는 기능도 제공한다.

'DB > 이론' 카테고리의 다른 글

[ TSDB ]  (0) 2024.07.23
[ ACID ]  (0) 2024.07.07
PL/SQL 런타임 작동 방식  (0) 2024.07.04
Oracle - [ Date ] vs [ TIMESTAMP ]  (0) 2024.06.28
SQL Injection - MyBatis  (0) 2024.06.24