본문 바로가기
개발관련 자료

인플럭스DB(InfluxDB) #4 - SQL DB와 비교

by jinu957 2020. 6. 11.
728x90

이번 포스팅은 요즘 핫한 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  없습니다.

 

 

 

728x90

댓글