이번 포스팅은 요즘 핫한 InfluxDB에 대하여 작성하도록 하겠습니다.
InfluxDB 역시 작년 기상청 프로젝트에서 전국에서 관측되는 데이터를 효과적으로 처리하기 위하여 검토되었고 그때 자료조사를 한 내용입니다.
순서는
2020/06/11 - [개발관련 자료] - InfluxDB #1 - 개요 및 특징
2020/06/11 - [개발관련 자료] - InfluxDB #2 - 주요 개념
2020/06/11 - [개발관련 자료] - InfluxDB #3 - 용어 정리
2020/06/11 - [개발관련 자료] - InfluxDB #4 - SQL DB와 비교
2020/06/11 - [개발관련 자료] - InfluxDB #5 - Schema설계 및 데이터Layout
2020/06/11 - [분류 전체보기] - InfluxDB #6 - In-Memory Indexing과 TSM(Time-Structured Merge Tree)
2020/06/11 - [개발관련 자료] - InfluxDB #7 - TSI(Time Series Index) 개요
2020/06/11 - [개발관련 자료] - InfluxDB #8 - TSI(Time Series Index) 세부 정보
2020/06/11 - [개발관련 자료] - InfluxDB #9 - Linux CentOS 설치
2020/06/12 - [개발관련 자료] - InfluxDB #10 - 사용법
으로 진행되며 도입 검토 차원에서 이루어진 조사라서 실무적용 보다는 InfluxDB란 어떤 것인지 파악하는 정도로만 생각하시면 될듯합니다.
1. InfluxDB와 SQL databases 비교
- InfluxDB는 시계열 데이터로 작동하도록 설계되었습니다.
- SQL 데이터베이스는 시계열을 처리 할 수 있지만 그 목적을 위해 엄격하게 생성된 것은 아닙니다.
- InfluxDB는 대량의 시계열 데이터를 저장하고 이러한 데이터에 대한 실시간 분석을 신속하게 수행하도록 만들어졌습니다.
- InfluxDB에서 타임스탬프는 주어진 데이터 시리즈에서 단일 지점을 식별합니다.
- 이것은 기본 키가 시스템에 의해 사전 설정되고 항상 time인 SQL 데이터베이스 테이블과 같습니다.
- InfluxDB는 스키마 기본 설정이 시간이 지나면 변경될 수 있음을 인식합니다.
- InfluxDB에서는 스키마를 정의 할 필요가 없습니다.
- 데이터 포인트는 측정의 필드 중 하나, 측정의 모든 필드 또는 그사이의 임의의 수를 가질 수 있습니다.
- 새로운 필드에 포인트를 쓰는 것만으로 새로운 필드를 측정에 추가 할 수 있습니다.
2. Terminology
- 아래의 표는 인덱싱되지 않은 컬럼 #_foodships과 인덱스된 컬럼 park_id, planet 및 time을 가진 SQL 데이터베이스에서 foodships라는 테이블의 간단한 예제입니다.
| park_id | planet | time | #_foodships | +-----------+----------+-------------------------------+------------------+ | 1 | Earth | 1429185600000000000 | 0 | | 1 | Earth | 1429185601000000000 | 3 | | 1 | Earth | 1429185602000000000 | 15 | | 1 | Earth | 1429185603000000000 | 15 | | 2 | Saturn | 1429185600000000000 | 5 | | 2 | Saturn | 1429185601000000000 | 9 | | 2 | Saturn | 1429185602000000000 | 10 | | 2 | Saturn | 1429185603000000000 | 14 | | 3 | Jupiter | 1429185600000000000 | 20 | | 3 | Jupiter | 1429185601000000000 | 21 | | 3 | Jupiter | 1429185602000000000 | 21 | | 3 | Jupiter | 1429185603000000000 | 20 | | 4 | Saturn | 1429185600000000000 | 5 | | 4 | Saturn | 1429185601000000000 | 5 | | 4 | Saturn | 1429185602000000000 | 6 | | 4 | Saturn | 1429185603000000000 | 5 | |
- InfluxDB에서 이와 같은 데이터는 다음과 같습니다.
name: foodships tags: park_id=1, planet=Earth time #_foodships ---- ------------ 2015-04-16T12:00:00Z 0 2015-04-16T12:00:01Z 3 2015-04-16T12:00:02Z 15 2015-04-16T12:00:03Z 15
name: foodships tags: park_id=2, planet=Saturn time #_foodships ---- ------------ 2015-04-16T12:00:00Z 5 2015-04-16T12:00:01Z 9 2015-04-16T12:00:02Z 10 2015-04-16T12:00:03Z 14
name: foodships tags: park_id=3, planet=Jupiter time #_foodships ---- ------------ 2015-04-16T12:00:00Z 20 2015-04-16T12:00:01Z 21 2015-04-16T12:00:02Z 21 2015-04-16T12:00:03Z 20
name: foodships tags: park_id=4, planet=Saturn time #_foodships ---- ------------ 2015-04-16T12:00:00Z 5 2015-04-16T12:00:01Z 5 2015-04-16T12:00:02Z 6 2015-04-16T12:00:03Z 5 |
- 위의 예를 참조하면 일반적으로 다음과 같습니다.
- InfluxDB measurement(foodships)은 SQL 데이터베이스 테이블과 유사합니다.
- InfluxDB tags(park_id와 planet)는 SQL 데이터베이스의 인덱싱 된 열과 같습니다.
- InfluxDB fields( #_foodships)는 SQL 데이터베이스에서 인덱싱되지 않은 열과 같습니다.
- InfluxDB points(ex: 2015-04-16T12:00:00Z 5)는 SQL 행과 유사합니다.
- 데이터베이스 용어 비교를 기반으로 InfluxDB의 연속 쿼리 와 보존 정책은 SQL 데이터베이스의 저장 프로시저와 유사합니다.
- 한번 지정되고 정기적으로 그리고 자동적으로 수행됩니다.
- 차이점은 InfluxDB measurement에는 SQL JOIN을 사용할 수 없습니다.
- 스키마 설계에는 그 차이가 반영되어야 합니다.
- 측정 값은 기본 인덱스가 항상 미리 설정되어있는 SQL 테이블과 같습니다.
- InfluxDB 타임스탬프는 유닉스 시간대(GMT)이거나 RFC3339에서 유효한 날짜-시간 문자열로 형식화되어야 합니다.
3. InfluxQL 및 SQL
- InfluxQL은 InfluxDB와 상호 작용할 수 있는 SQL과 유사한 쿼리 언어입니다.
- InfluxQL의 SELECT 진술은 SQL SELECT문 형식을 따릅니다.
SELECT <stuff> FROM <measurement_name> WHERE <some_conditions> |
- 여기서는 WHERE선택 사항입니다.
- 위 섹션에서 InfluxDB 출력을 얻으려면 다음을 입력하십시오.
SELECT * FROM "foodships" |
- 행성에 대한 데이터 Saturn만보고 싶다면 다음을 입력하십시오.
SELECT * FROM "foodships" WHERE "planet" = 'Saturn' |
- Saturn의 2015년 4월 16일 12:00:01 UTC 이후 행성에 대한 데이터를 보려면 다음을 입력하십시오.
SELECT * FROM "foodships" WHERE "planet" = 'Saturn' AND time > '2015-04-16 12:00:01' |
- 위의 예와 같이 InfluxQL을 사용하면 WHERE절의 쿼리 시간 범위를 지정할 수 있습니다.
- 날짜 - 시간 문자열을 사용할 수 있습니다 YYYY-MM-DD HH:MM:SS.mmm (mmm은 밀리 초이고 선택 사항이며 마이크로 초 또는 나노초를 지정할 수도 있음)
- now()를 사용하여 서버의 현재 타임스탬프를 참조하는 상대 시간을 사용할 수도 있습니다.
SELECT * FROM "foodships" WHERE time > now() - 1h |
- foodships는 타임스탬프가 서버의 현재 시간에서 1시간을 뺀 것보다 새로운 측정값의 데이터를 출력합니다.
- 기간을 지정하는 옵션 now()은 다음과 같습니다.
- ns(nanoseconds), u or µ(microseconds), ms(milliseconds), s(seconds), m(minutes), h(hours), d(days), w(weeks)
- InfluxQL은 표현식, SHOW명령문 및 GROUP BY명령문에서 정규 표현식, 산술 연산을 지원합니다.
4. InfluxDB가 CRUD가 아닌 이유
- nfluxDB는 시계열 데이터에 최적화 된 데이터베이스입니다.
- 이 데이터는 일반적으로 분산 센서 그룹, 대형 웹 사이트의 클릭 데이터 또는 금융 거래 목록과 같은 출처에서 가져옵니다.
- 이 데이터의 공통점 중 하나는 집계에서 더 유용하다는 것입니다.
- 화요일 12시 38분 35초 (UTC)에 컴퓨터의 CPU 사용률이 12%라고 말하면서 결론을 내리기가 어렵습니다.
- 나머지 시리즈와 결합하여 시각화하면 더욱 유용해집니다.
- 시간 경과에 따른 추세가 나타나기 시작하고 데이터에서 실행 가능한 통찰력을 얻을 수 있습니다.
- 또한, 시계열 데이터는 일반적으로 한 번 작성되고 거의 업데이트되지 않습니다.
- 결과적으로 InfluxDB는 완전한 CRUD 데이터베이스가 아니라 CR-ud와 같아서 업데이트 및 destroy에 대한 데이터 작성 및 읽기의 우선순위를 지정하고 일부 업데이트 및 destroy동작 을 방지하여 작성 및 읽기 성능을 향상합니다.
- 점을 업데이트하려면 동일 한 측정 값, 태그 세트 및 타임스탬프 로 점을 삽입하십시오.
- series는 drop하거나 delete할 수 있지만, 필드 값을 기준으로 각 포인트는 삭제할 수 없습니다.
- 이 문제를 해결하기 위해 필드 값을 검색하고 시간을 검색한 다음 필드를 기준으로 DELETE를 수행할 수 있습니다.
- 아직 태그를 업데이트하거나 이름을 변경할 수 없습니다.
- 일련의 점의 태그를 수정하려면 잘못된 태그 값이 있는 점을 찾고 값을 원하는 값으로 변경하고 점을 다시 작성한 다음 이전 태그 값으로 series를 drop하십시오.
- value와는 반대로 태그 키로 태그를 delete할 수 없습니다.
'개발관련 자료' 카테고리의 다른 글
인플럭스DB(InfluxDB) #6 - In-Memory Indexing과 TSM(Time-Structured Merge Tree) (0) | 2020.06.11 |
---|---|
인플럭스DB(InfluxDB) #5 - Schema설계 및 데이터Layout (0) | 2020.06.11 |
인플럭스DB(InfluxDB) #3 - 용어 정리 (0) | 2020.06.11 |
인플럭스DB(InfluxDB) #2 - 주요 개념 (0) | 2020.06.11 |
인플럭스DB(InfluxDB) #1 - 개요 및 특징 (0) | 2020.06.11 |
댓글