핵심 개념
핵심 개념
Machbase 아키텍처, 설계 원칙 및 핵심 개념에 대해 깊이 있게 살펴봅니다. 이 섹션은 Machbase가 내부적으로 어떻게 작동하는지, 그리고 왜 시계열 데이터에 최적화되어 있는지 이해하는 데 도움을 줍니다.
이 섹션에서 다루는 내용
시계열 데이터 이해하기
시계열 데이터를 특별하게 만드는 요소와 전통적인 데이터베이스가 이를 다루기 어려운 이유를 배웁니다:
- 시계열 워크로드의 특성
- 쓰기 중심 vs 읽기 중심 패턴
- 추가 전용 아키텍처가 중요한 이유
- 시간 기반 파티셔닝 및 압축
테이블 타입 개요
올바른 테이블 타입을 선택하기 위한 완전한 가이드:
- 4가지 테이블 타입의 상세한 비교
- 의사 결정 흐름도 및 선택 가이드
- 성능 특성
- 일반적인 사용 사례 및 안티패턴
- 각 타입을 사용해야 하는 경우
인덱싱 및 성능
Machbase가 높은 성능을 달성하는 방법:
- Tag 테이블을 위한 파티션 인덱싱
- LSM (Log-Structured Merge) 인덱싱
- 자동 인덱스 관리
- 쿼리 최적화 전략
- Rollup 통계 이해하기
누가 읽어야 하나요
이 섹션은 다음과 같은 분들을 위한 것입니다:
- Machbase 기반 애플리케이션을 설계하는 개발자
- 시스템 아키텍처를 계획하는 아키텍트
- 성능을 최적화하는 DBA
- 데이터 파이프라인을 구현하는 데이터 엔지니어
사전 요구사항
핵심 개념을 시작하기 전에:
학습 경로
다음 순서로 읽는 것을 권장합니다:
- 시계열 데이터 - 문제 영역 이해
- 테이블 타입 개요 - 적절한 도구 선택
- 인덱싱 - 성능 최적화
빠른 참조
테이블 타입 결정 가이드
센서 데이터인가요 (ID, 시간, 값)?
예 → Tag 테이블
로그/이벤트 데이터인가요?
예 → Log 테이블
메모리에서 UPDATE/DELETE가 필요한가요?
예 → Volatile 테이블
참조/마스터 데이터인가요?
예 → Lookup 테이블
성능 특성
테이블 타입 | 쓰기 속도 | 읽기 속도 | UPDATE/DELETE | 저장소 |
---|---|---|---|---|
Tag | 초당 수백만 건 | 매우 빠름 | 불가* | 디스크 |
Log | 초당 수백만 건 | 빠름 | 시간 기반 | 디스크 |
Volatile | 초당 수만 건 | 매우 빠름 | 키 기반 | 메모리 |
Lookup | 초당 수백 건 | 빠름 | 키 기반 | 디스크 |
*Tag 테이블 메타데이터는 업데이트 가능
핵심 개념 한눈에 보기
한 번 쓰기 아키텍처
Machbase는 추가 전용 데이터에 최적화되어 있습니다:
- 행 레벨 잠금 없음
- 초고속 순차 쓰기
- 데이터 무결성 (로그는 변경 불가)
시간 기반 파티셔닝
데이터는 자동으로 시간별로 파티션됩니다:
- 효율적인 시간 범위 쿼리
- 쉬운 데이터 보존 관리
- 최적화된 압축
컬럼형 압축
데이터는 열 단위로 저장됩니다:
- 10-100배 압축 비율
- 더 빠른 분석 쿼리
- 절감된 스토리지 비용
자동 Rollup (Tag 테이블)
통계가 자동으로 생성됩니다:
- 초, 분, 시간 단위 요약
- MIN, MAX, AVG, SUM, COUNT, SUMSQ
- 수동 집계 불필요
일반적인 오해
“모든 쿼리를 위해 인덱스를 생성해야 한다”
거짓입니다. Machbase는 자동으로 최적의 인덱스를 생성합니다:
- Tag 테이블: 3단계 파티션 인덱스
- Log 테이블: 시간 기반 파티셔닝 (인덱스 선택 사항)
- Volatile 테이블: PRIMARY KEY를 위한 Red-black 트리
- 대부분의 쿼리는 수동 인덱스 없이도 잘 작동합니다
“센서마다 하나의 테이블을 만들어야 한다”
거짓입니다. 모든 센서에 대해 단일 Tag 테이블을 사용하세요:
- 더 나은 성능
- 더 쉬운 관리
- 자동 최적화
“Lookup 테이블은 느리다”
부분적으로 맞습니다. Lookup 테이블은:
- 느린 쓰기 (초당 수백 건 vs 수백만 건)
- 빠른 읽기 (SELECT에 최적화)
- 대용량 삽입이 아닌 참조 데이터에 사용
“Volatile 테이블은 일반 테이블과 같다”
거짓입니다. Volatile 테이블은 특별합니다:
- 100% 메모리에 상주
- 종료 시 데이터 손실
- 임시/캐시 데이터에만 사용
설계 원칙
1. 올바른 테이블 타입 선택
잘못된 사용 사례에 테이블 타입을 강제로 적용하지 마세요:
- 센서 데이터는 Tag 테이블
- 이벤트 스트림은 Log 테이블
- 실시간 캐시는 Volatile 테이블
- 참조 데이터는 Lookup 테이블
2. 시간 기반 기능 활용
Machbase의 시간 인식 기능을 사용하세요:
-- 좋음: DURATION 사용
SELECT * FROM logs DURATION 1 HOUR;
-- 덜 최적: 수동 시간 필터링
SELECT * FROM logs
WHERE _arrival_time >= NOW - INTERVAL '1' HOUR;
3. 데이터 보존 구현
데이터가 무한정 증가하지 않도록 하세요:
-- 일일 정리
DELETE FROM logs EXCEPT 30 DAYS;
4. 분석에 Rollup 사용
사전 집계된 데이터를 쿼리하세요:
-- 빠름: Rollup 사용
SELECT * FROM sensors WHERE rollup = hour;
-- 느림: 원시 데이터 집계
SELECT sensor_id, AVG(value) FROM sensors GROUP BY sensor_id;
아키텍처 개요
스토리지 계층
┌─────────────────────────────────────┐
│ 쿼리 엔진 │
├─────────────────────────────────────┤
│ 메모리 관리자 │
│ ┌──────────────┐ ┌──────────────┐│
│ │ Volatile │ │ 쿼리 캐시 ││
│ │ 테이블 │ │ ││
│ └──────────────┘ └──────────────┘│
├─────────────────────────────────────┤
│ 스토리지 엔진 │
│ ┌──────────────┐ ┌──────────────┐│
│ │ Tag/Log │ │ Lookup ││
│ │ 테이블 │ │ 테이블 ││
│ └──────────────┘ └──────────────┘│
└─────────────────────────────────────┘
데이터 흐름
센서/애플리케이션
↓
APPEND API (대량 삽입)
↓
쓰기 버퍼 (메모리)
↓
디스크에 플러시 (압축)
↓
자동 인덱싱
↓
쿼리 엔진
다음 단계
더 깊이 살펴볼 준비가 되셨나요?
- 시작하기: 시계열 데이터 이해하기
- 그 다음 읽기: 테이블 타입 개요
- 마지막: 인덱싱 및 성능
또는 다음으로 이동:
추가 자료
이러한 핵심 개념을 이해하면 효율적이고 확장 가능한 Machbase 애플리케이션을 구축하는 데 도움이 됩니다!
최근 업데이트