이번 포스팅은 요즘 핫한 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의 모든 릴리스에서 진행됩니다.
'개발관련 자료' 카테고리의 다른 글
인플럭스DB(InfluxDB) #9 - Linux CentOS 설치 (0) | 2020.06.11 |
---|---|
인플럭스DB(InfluxDB) #8 - TSI(Time Series Index) 세부 정보 (0) | 2020.06.11 |
인플럭스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) #4 - SQL DB와 비교 (0) | 2020.06.11 |
댓글