2019. 7. 26. 17:11ㆍ[정리] 데이터베이스/[NoSQL] Influx DB
시계열 데이터
데이터가 Timestamp 와 같이 저장된 데이터
가로축이 Timestamp 가 와야 시계열 데이터다.
Timestamp 를 지정안해줘도 자동으로 지정되서 저장됨
테이블 | Measurements |
인덱싱된 칼럼 | Tags |
인덱싱되지 않은 칼럼 (실질적인 값이 저장되는 곳) | Fields (or point) |
기본키 | Series (or key) |
TSDB
시계열 데이터를 다루는 데이터베이스
Influx DB는 TSDB의 일종이다.
Influx DB는 Line protocol 를 사용한다
Influx DB는 스키마를 가지지 않는다.
특정 measurments(table)에 존재하지 않는 필드가 들어오면 칼럼이 새로 생긴다.
단 이때 생긴 필드의 타입은 최초에 들어온 필드 데이터의 타입에 의해 결정된다.
Line protocol = 데이터 포맷을 [key] [field] [timestamp] 와 같이 저장하는 것
key 는 measurement 하나일 수도 있고 measurements + tags 일 수도 있다.
이 때 key 를 series 라고도 부른다.
이 때 field 를 point 라고도 부른다.
즉 다음 두 데이터 포맷은 같은 의미다.
[key] [field] [timestamp]
[series] [point] [timestamp]
TSDB의 특징
트랜잭션을 보장하지 않는다.
Create Read 에만 포커싱 되어있다. CRUD 가 아닌 CR-ud 를 지원한다.
Write 작업의 결과는 오름차순을 보장해가며 저장된다.
Write 작업은 가능한 먼 과거의 데이터 삽입이 드문 것이 좋다.
Delete 작업은 bulk 로 모아서 한번에 처리한다.
TSDB의 활용
Monitoring
Real time 분석
Sensor data 관리
IOT
TSDB 를 사용하는 일반적인 계층구조
1. Collector Layer (선택 사항)
2. TSDB Cluster Layer (필수 사항)
3. Presentation Layer (선택 사항)
4. Alert Layer (선택 사항)
1. Collector Layer
TSDB 는 기본적으로 일반 DB와 유사하게 데이터를 저장하고 읽는 기능밖에 없다.
그래서 데이터를 수집하는 레이어가 하나 필요하다.
이는 개발자가 만든 custom 한 어플리케이션일 수 있다.
ex) Collectd, Telegraf, sCollector
2. TSDB Cluster Layer
ex) InfluxDB, OpenTSDB, Druid ...
3. Presentation Layer
TSDB에 저장된 데이터를 시각화해서 보여주는 레이어
이 역시 개발자가 만든 Custom 한 어플리케이션일 수 있지만 그래프를 그리는 과정을 직접 만들지는 않는다.
일반적으로 Grafana를 많이 쓰는듯하다.
ex) Grafana, Graphite, Chrongograf
4. Alert Layer
시계열 데이터에 어떤 특정 조건이 발생했을 때 알람을 보낼 수 있도록 하는 레이어
Collector Layer와 마찬가지로 개발자가 직접 만든 custom 한 어플리케이션 일 수 있다.
ex) kapacitor
Influx DB 접근
influx
> show database
-------------
name
telegraf
> use telegraf # database telegraf 를 사용하겠다.
> show measurements # telegraf 의 measurements(table) 을 검색하겠다.
-------------
name
cpu
disk
diskio
kernel
processes
swap
system
> select * from cpu limit 10 # cpu 안에 들어있는 데이터 열람
> show series # 모든 key 를 보여준다.
> show tag keys # measurements(table) 안에 어떤 태그들이 있는가
> show field keys # measurements(table) 안에 어떤 필드들이 있는가
SQL 쿼리문을 유사하게 사용할 수 있고 Where 절에 정규표현이 들어갈 수 있다.
필드 값은 인덱싱하지 않기 때문에 태그값을 검색하는 것을 추천한다.
> insert monitoring,cpu=i5,core=5 memory=600,disk=50000
key | monitoring,cpu=i5,core=5 |
measurements | monitoring |
tags | cpu=i5,core=5 |
field | memory=600,disk=50000 |
timestamp | 현재 timestamp 로 자동 입력 |
> insert monitoring,cpu=i5,core=5 memory=700,disk=50000 1564127777
key | monitoring,cpu=i5,core=5 |
measurements | monitoring |
tags | cpu=i5,core=5 |
field | memory=700,disk=50000 |
timestamp | 1564127777 |
1564127777