이번 포스팅은 요즘 핫한 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의 메모리 내 스냅샷입니다.
- 이는 특정 시점의 색인 보기를 일관되게 제공하는 데 필요합니다.
- 파일 세트는 또한 모든 파일에 대한 참조 카운팅을 쉽게 하여 파일의 모든 판독기가 완료될 때까지 압축을 통해 파일이 삭제되지 않도록 합니다.
'개발관련 자료' 카테고리의 다른 글
인플럭스DB(InfluxDB) #10 - 사용법 (0) | 2020.06.12 |
---|---|
인플럭스DB(InfluxDB) #9 - Linux CentOS 설치 (0) | 2020.06.11 |
인플럭스DB(InfluxDB) #7 - 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 |
댓글