이번 글에서는 InfluxQL을 통한 InfluxDB의 CR-ud 쿼리를 직접 사용해보겠다
Influx 쿼리는 어떻게 사용하는 것일까..
그 속으로 들어가 보자!
Data Format
InfluxDB 쿼리를 사용하기 전에 Line protocol에 대해서 알아보자
Line protocol
- Measurement, Tag set Field set timestamp
- 첫 번째는 항상 Measurement가 와야 함
- Tag set과 Field set 은 key=value 형태로 구성되며 여러 개일 경우 쉼표(,)로 구분한다
- timestamp는 생략이 가능하다 (생략 시 데이터 삽입 기준 시간이 들어감)
- 하나의 행
- point라 부른다
- line protocol 형식으로 구성되어있다
- 개행(줄 바꿈)으로 구분
Line protocol 구성
예시 1)
soccer,name=son,team=tot city="london",age=28 151178300000000000
measurement | soccer |
tag (only string type) |
name, team |
field (모든 타입 가능, string type인 경우 “ “ 로 구분한다) |
city, age |
timestamp (생략가능, 생략 시 데이터 삽입 시점 시간이 들어감) |
151178300000000000 |
예시 2)
bank, company=woowaBro color="mint", year=2024
measurement | bank |
tag (only string type) |
company |
field (모든 타입 가능, string type인 경우 “ “ 로 구분한다) |
color, year |
Data Load
schemaless
📢 Influx 내 데이터베이스 중 회사에서 쓰이는
데이터베이스가 있으므로 해당 부분은 가리겠습니다
- 대부분의 DB와 다르게 Mesurement(Table)를 따로 생성하지 않고 바로 insert 가능
- Measurement 존재 x → Measurement 생성 뒤 데이터가 저장
- Measurement 존재 o → 바로 데이터 저장
- timestamp는 생략 가능, 생략 시 데이터가 저장되는 시점의 시간으로 저장
InfluxDB를 CR-ud로 표현하는 이유는 시계열 데이터베이스는 쓰기(C), 읽기(R)에 특화되어 있다.
따라서 수정(u)과 삭제(d)를 권장하지 않는 데이터베이스이다.
하지만 실제 실무에서는 무궁무진한 상황이 발생하기 마련이다..
자 이제 진짜 Line protocol을 활용한 InfluxQL로 CR-ud를 "모두" 사용해보자!
Influx Query
1. 데이터 삽입 (insert)
- insert mesurement,tagSet fieldSet timestamp
- tag 혹은 field 가 여러 개일 경우 쉼표로 구분
- tag → field 넘어갈 때 공백으로 구분
insert soccer,name=son,team=tot city="london",age=28 151178300000000000
💡 쉼표 간의 띄어쓰기를 할시 아래와 같이 오류가 발생한다!
2. measurement 내 tag key 확인 (indexing 컬럼)
- show tag keys on “데이터베이스” from “measurement”
show tag keys on "exemDB" from "soccer"
3. measurement 내 field key 조회 (non-indexing 컬럼)
- show field keys on “데이터베이스” from “measurement”
show field keys on "exemDB" from "soccer"
4. 데이터 조회 (select)
- RDB 쿼리와 동일
select * from soccer
5. 데이터 삭제 (delete)
- delete from measurement명 where tag키 = ‘tag값’
delete from soccer where team = 'brazil'
6. 데이터 수정 (update)
- InfluxDB는 업데이트 쿼리를 따로 지원하지 않는다!!
- 단 수정할 데이터의 timestamp를 가져와서 그대로 insert 하면 덮어씌워진다
- ※ 주의 - tag set의 값은 동일한 상태에서만 field 값 수정만 가능
1. 정상적인 수정
- 해당 timestamp를 그대로 가져와 쿼리 맨 마지막에 세팅
- field인 city 값과 age 값을 변경
- key인 name과 team은 그대로 같은 값으로 세팅
2. 비정상적인 수정 → 새로운 데이터 삽입
- 해당 timestamp를 그대로 가져와 쿼리 맨 마지막에 세팅
- tag 값인 name을 beom → beom97로 변경
- field 값인 age 값 변경
이처럼 InfluxDB는 읽기와 쓰기에 특화되어 있어 update는 insert를 통해 덮어 씌우는 방식으로 사용이 가능합니다
CRUD를 모두 해봄으로써 기존 RDB(MariaDB) 쿼리와 유사하며, Line protocol 방식만 추가된 것처럼 느껴집니다
다음 글에서는 InfluxDB 데이터의 백업, 복구에 대해서 다뤄보도록 하겠습니다!
감사합니다 :)
'Database > InfluxDB' 카테고리의 다른 글
InfluxDB - (3) 데이터 백업(backup) 및 복구(restore) (0) | 2022.06.04 |
---|---|
InfluxDB - (1) 시계열 데이터베이스란? (0) | 2022.06.03 |