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

인플럭스DB(InfluxDB) #8 - 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란 어떤 것인지 파악하는 정도로만 생각하시면 될듯합니다.

 


 

InfluxDB 데이터를 수집할  값을 저장할 뿐만 아니라 측정  태그 정보를 색인화하여 신속하게 쿼리   ​​있습니다.

TSI 인덱스 데이터를 디스크에 저장하므로  이상 RAM 의해 제한되지 않습니다. TSI 운영 체제의 페이지 캐시를 사용하여  데이터를 메모리로 가져오고 콜드 데이터를 디스크에 저장합니다.

 

 

1. TSI 사용

 

  • TSI 사용하려면 index-version=tsi1 InfluxDB 구성 파일(influxdb.conf) 설정해야 합니다.

 

 

2. Tooling

 

  • influx_inspect dumptsi

      - 색인 문제를 해결하려면 influx_inspect dumptsi 명령을 사용하십시오.

      -  명령을 사용하면 색인, 파일 또는 파일 세트에 대한 요약 통계를 인쇄   있습니다.

      -  명령은  번에 하나의 인덱스에서만 작동합니다.

 

  • influx_inspect buildtsi

      - 기존의 샤드를 메모리  인덱스에서 TSI 인덱스로 변환하거나 손상된 기존 TSI 인덱스가 있는 경우 buildtsi 명령을 사용하여 기본 TSM 데이터에서 인덱스를 작성할  있습니다.

      - 재빌드하려는 기존 TSI 인덱스가 있는 경우 먼저 샤드 내의 인덱스 디렉토리를 삭제하십시오.

      -  명령은 서버 수준에서 작동하지만 데이터베이스, 보존 정책  샤드 필터를 선택적으로 추가하여 샤드의 하위 집합에만 적용   있습니다.

 

 

3. 파일 구성

 

  • TSI(Time Series Index) InfluxDB 시리즈 데이터용 로그 구조 병합 트리 기반 데이터베이스입니다.
  • TSI 여러 부분으로 구성됩니다.

      - Index: 단일 샤드의 전체 인덱스 데이터 세트를 포함합니다.

      - Partition: 샤드에 대한 데이터의 파티션을 포함합니다.

      - LogFile: 새로 작성된 시리즈를 메모리  인덱스로 포함하며 WAL 유지됩니다.

      - IndexFile: LogFile에서 빌드되거나  개의 연속 인덱스 파일에서 병합된 불변의 메모리 맵핑된 인덱스를 포함합니다.

 

  • 또한 전체 데이터베이스에 걸쳐 일련의 모든 키가 들어있는 SeriesFile 있습니다. 데이터베이스 내의  샤드는 동일한 시리즈 파일을 공유합니다.

 

 

4. Writes

 

  • 쓰기가 시스템에 들어올  다음이 발생합니다.

      1) 시리즈는 시리즈 파일에 추가되거나 이미 존재하는 경우 조회됩니다.

      2) 시리즈가 Index 전송됩니다. Index 기존 시리즈 ID bitsets 유지 보수하고 이미 작성된 시리즈는 무시합니다.

      3) 시리즈는 해시되어 적절한 Partition으로 보내집니다.

      4) Partition 시리즈를 LogFile 항목으로 씁니다.

      5) LogFile 디스크의 Write-ahead 로그파일에 시리즈를 기록하고 일련의 메모리  인덱스에 시리즈를 추가합니다.

 

 

5. Compaction

 

  • LogFile 임계값(5MB) 초과하면  활성로그파일이 만들어지고 이전 파일은 IndexFile 압축되기 시작합니다.
  • 첫번째 색인파일은 Level1(L1) 있습니다.
  • 로그 파일은 레벨 Level0(L0)으로 간주 됩니다.
  •  개의 작은 색인 파일을 병합하여 색인 파일을 만들 수도 있습니다.
  • 예를 들어 인접한  개의 L1 인덱스 파일이 존재하면 L2 인덱스 파일로 병합   있습니다.

 

 

6. Reads

 

  • 색인은 다음과 같은 데이터 집합을 검색하기 위한 여러 API 호출을 제공합니다.

      - MeasurementIterator(): 측정 이름의 정렬  목록을 반환합니다.

      - TagKeyIterator(): 측정에서 정렬  태그  목록을 반환합니다.

      - TagValueIterator(): 태그 키에 대한 태그 값의 정렬  목록을 반환합니다.

      - MeasurementSeriesIDIterator(): 측정에 대한 모든 계열 ID 정렬  목록을 반환합니다.

      - TagKeySeriesIDIterator(): 태그 키에 대한 모든 계열 ID 정렬  목록을 반환합니다.

      - TagValueSeriesIDIterator(): 태그 값에 대한 모든 계열 ID 정렬  목록을 반환합니다.

 

  •  반복자는 모두 여러 병합 반복자를 사용하여 구성 가능합니다.
  • 반복자의  유형 (측정, 태그 , 태그 , 시리즈 ID)에는 여러 개의 병합 반복자 유형이 있습니다.

      - Merge:  개의 반복기 항목에서 중복을 제거합니다.

      - Intersect:  개의 반복기에 있는 항목만 반환합니다.

      - Difference:  번째 반복자에서  번째 반복자에 없는 항목만 반환합니다.

 

  • 예를 들어  개의 샤드에서 작동하는 region != 'us-west' WHERE 절이 있는 쿼리는 다음과 같은 반복기 집합을 구성합니다.
DifferenceSeriesIDIterators(

    MergeSeriesIDIterators(

        Shard1.MeasurementSeriesIDIterator("m"),

        Shard2.MeasurementSeriesIDIterator("m"),

    ),

    MergeSeriesIDIterators(

        Shard1.TagValueSeriesIDIterator("m", "region", "us-west"),

        Shard2.TagValueSeriesIDIterator("m", "region", "us-west"),

    ),

)

 


7. Log File Structure 

 

  • 로그 파일은 단순히 순차적으로 디스크에 기록된 LogEntry 객체 목록으로 구성됩니다.
  • 로그 파일은 5MB 도달할 때까지 기록된 다음 인덱스파일로 압축됩니다.
  • 로그의 항목 개체는 다음 유형  하나일  있습니다.

      - AddSeries

      - DeleteSeries

      - DeleteMeasurement

      - DeleteTagKey

      - DeleteTagValue

 

  • 로그 파일의 in-memory index 다음을 추적합니다.

      - Measurements by name

      - Tag keys by measurement

      - Tag values by tag key

      - Series by measurement

      - Series by tag value

      - series, measurements, tag keys, and tag values 대한 삭제 표시

 

  • 로그 파일은 시리즈 ID 존재  삭제 표시에 대한 bitset 유지 관리합니다.
  • 이러한 bitset 다른 로그 파일  인덱스 파일과 병합되어 시작  전체 인덱스 비트 집합을 다시 생성합니다.

 

 

8. Index File Structure

 

  • 인덱스 파일은 로그 파일과 유사한 정보를 추적하는 불변 파일이지만 모든 데이터는 메모리 맵에서 직접 액세스   있도록 디스크에 인덱싱되고 쓰여집니다.
  • 색인 파일의 섹션은 다음과 같습니다.

      - TagBlocks: 단일 태그 키에 대한 태그  인덱스를 유지 관리합니다.

      - MeasurementBlock: 측정 지표와 태그 키를 유지 관리합니다.

      - Trailer: 파일의 오프셋 정보와 카디널리티 추정을 위한 HyperLogLog sketches 저장합니다.

 

 

9. Manifest

 

  • MANIFEST 파일은 색인 디렉토리에 저장되며 색인에 속한 모든 파일과 색인에 액세스해야 하는 순서를 나열합니다.
  •  파일은 압축이 발생할 때마다 갱신됩니다.
  • 색인 파일에 없는 디렉토리의 모든 파일은 압축중인 색인 파일입니다.

 

 

10. FileSet

 

  • 파일 세트는 InfluxDB 프로세스가 실행되는 동안 얻은 manifest 메모리  스냅샷입니다.
  • 이는 특정 시점의 색인 보기를 일관되게 제공하는  필요합니다.
  • 파일 세트는 또한 모든 파일에 대한 참조 카운팅을 쉽게 하여 파일의 모든 판독기가 완료될 때까지 압축을 통해 파일이 삭제되지 않도록 합니다.

 

 

728x90

댓글