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

인플럭스DB(InfluxDB) #7 - TSI(Time Series Index) 개요

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. 개요

 

  • 많은 수의 time series,  데이터베이스가 저장하는 고유한 time series 수가 매우 높은 카디널리티를 지원하기 위해 InfluxData 새로운 TSI (Time Series Index) 추가했습니다.
  • InfluxData TSI 스토리지 엔진을 사용하면 수백만 가지의 고유한 time series 사용할  있습니다.
  • 목표는 시리즈의 수는 서버 하드웨어의 메모리양에 의해 제한되지 않아야 한다는 것입니다.
  • 중요한 것은 데이터베이스에 존재하는 시리즈 수가 데이터베이스 시작 시간에 거의 영향을 미치지 않는다는 것입니다.

 

 

2. 배경 정보

 

  • InfluxDB 실제로 하나의  데이터베이스, time series 데이터 저장소  측정, 태그  필드 메타 데이터의 inverted index 같습니다.

 

 

3. Time-Structured Merge Tree (TSM)

 

  • TSM(Time-Structured Merge Tree)엔진은 지속적으로 향상되었으며 원시 time series 데이터에 대한 최대 처리량, 압축  쿼리 속도를 얻는 문제를 해결하기 위해 노력하였습니다.
  • TSI까지 inverted index TSM 데이터를 기반으로 데이터베이스를 시작하는 동안 작성된 메모리  데이터 구조였습니다.
  • , 모든 측정, 태그 -   필드 이름에 대해 메타 데이터의 해당 비트를 기본 time series 매핑하는 조회 테이블이 메모리에 있음을 의미했습니다.
  • 덧셈 계열이 많은 사용자의 경우  time series 만들어지면서 메모리 사용이 계속 증가했습니다.
  • 그리고 시작 시간에 모든 데이터가 힙에 로드되어야 하므로 시작 시간이 증가했습니다.

 

 

4. Time Series Index (TSI)

 

  • 새로운 TSI(Time Series Index) 색인을 우리가 메모리 맵핑하는 디스크상의 파일로 이동시킵니다.
  • 이것은 운영 체제가 LRU(Least Recently Used) 메모리를 처리하도록 합니다.
  • 원시 time series 데이터에 대한 TSM 엔진과 마찬가지로, 메모리 맵핑된 인덱스로 쿼리할때 병합되는 메모리  구조의 미리 쓰기 로그가 있습니다.
  • 백그라운드 루틴은 인덱스를  파일로 압축하여 쿼리 시간에 너무 많은 인덱스 병합을 수행하지 않도록 지속적으로 실행합니다.
  • 커버 아래에서, 우리는 Robin Hood Hashing 같은 빠른 검색 기법과 HyperLogLog++ 같은 기법을 사용하여 Caedinality 추정치의 스케치를 유지합니다.
  • 후자는 SHOW CARDINALITY 쿼리와 같은 쿼리 언어에 항목을 추가하는 기능을 제공합니다.

 

 

5. TSI 해결해야  문제

 

  • TSI (Time Series Index) 다루는 주요 문제는 일시적인 time series입니다.
  • 가장 자주 발생하는 문제는 태그에 식별자를 넣어 프로세스 메트릭 또는 컨테이너 메트릭별로 추적하려는 유스케이스에서 발생합니다.
  • 예를 들어, Kubernetes Heapster 프로젝트가 이를 수행합니다.
  • 쓰기  쿼리를 위해  이상 뜨겁지 않은 시리즈의 경우 메모리에서 공간을 차지하지 않습니다.
  • Heapster 프로젝트  유사한 사용 사례에서 다루지 않은 문제는 SHOW 쿼리에서 반환하는 데이터의 범위를 제한하는 것입니다.
  • 향후 쿼리 언어를 업데이트하여 시간에 따라 결과를 제한  것입니다.
  • 우리는 또한 모든 시리즈가 읽기  쓰기에 뜨거워지는 문제를 해결하지 못합니다.
  •  문제의 경우 scale-out 클러스터링이 해결책입니다.
  • 쿼리 시리즈와 엔진을 최적화하여 계속 대규모 시리즈를 작업해야 합니다.
  • 가드레일과 제한을 언어에 추가해야 하고 결국 spill-to-disk query 처리를 추가해야  것입니다.
  •  작업은 InfluxDB 모든 릴리스에서 진행됩니다.

 

728x90

댓글