핵심 개념

핵심 개념

Machbase 아키텍처, 설계 원칙 및 핵심 개념에 대해 깊이 있게 살펴봅니다. 이 섹션은 Machbase가 내부적으로 어떻게 작동하는지, 그리고 왜 시계열 데이터에 최적화되어 있는지 이해하는 데 도움을 줍니다.

이 섹션에서 다루는 내용

시계열 데이터 이해하기

시계열 데이터를 특별하게 만드는 요소와 전통적인 데이터베이스가 이를 다루기 어려운 이유를 배웁니다:

  • 시계열 워크로드의 특성
  • 쓰기 중심 vs 읽기 중심 패턴
  • 추가 전용 아키텍처가 중요한 이유
  • 시간 기반 파티셔닝 및 압축

테이블 타입 개요

올바른 테이블 타입을 선택하기 위한 완전한 가이드:

  • 4가지 테이블 타입의 상세한 비교
  • 의사 결정 흐름도 및 선택 가이드
  • 성능 특성
  • 일반적인 사용 사례 및 안티패턴
  • 각 타입을 사용해야 하는 경우

인덱싱 및 성능

Machbase가 높은 성능을 달성하는 방법:

  • Tag 테이블을 위한 파티션 인덱싱
  • LSM (Log-Structured Merge) 인덱싱
  • 자동 인덱스 관리
  • 쿼리 최적화 전략
  • Rollup 통계 이해하기

누가 읽어야 하나요

이 섹션은 다음과 같은 분들을 위한 것입니다:

  • Machbase 기반 애플리케이션을 설계하는 개발자
  • 시스템 아키텍처를 계획하는 아키텍트
  • 성능을 최적화하는 DBA
  • 데이터 파이프라인을 구현하는 데이터 엔지니어

사전 요구사항

핵심 개념을 시작하기 전에:

학습 경로

다음 순서로 읽는 것을 권장합니다:

  1. 시계열 데이터 - 문제 영역 이해
  2. 테이블 타입 개요 - 적절한 도구 선택
  3. 인덱싱 - 성능 최적화

빠른 참조

테이블 타입 결정 가이드

센서 데이터인가요 (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 (대량 삽입)
     ↓
  쓰기 버퍼 (메모리)
     ↓
  디스크에 플러시 (압축)
     ↓
  자동 인덱싱
     ↓
  쿼리 엔진

다음 단계

더 깊이 살펴볼 준비가 되셨나요?

  1. 시작하기: 시계열 데이터 이해하기
  2. 그 다음 읽기: 테이블 타입 개요
  3. 마지막: 인덱싱 및 성능

또는 다음으로 이동:

추가 자료


이러한 핵심 개념을 이해하면 효율적이고 확장 가능한 Machbase 애플리케이션을 구축하는 데 도움이 됩니다!

최근 업데이트