본문 바로가기
Database2026년 5월 23일3분 읽기

MongoDB 8 시계열 컬렉션 — 하루 1TB 프로덕션 운영기

YS
김영삼
조회 693
MongoDB 8 시계열 컬렉션 — 하루 1TB 프로덕션 운영기

핵심 요약

MongoDB 8의 time-series 컬렉션으로 IoT(센서 1.2만 대) 데이터 일 1TB 수집·분석을 단일 클러스터로. ZSTD 압축 + bucket 자동 관리로 디스크 사용량 -85%, range query 평균 12배 빠름. 별도 TSDB(InfluxDB/Timescale) 도입 없이 완결.

1. 시계열 컬렉션 만들기

db.createCollection("metrics", {
  timeseries: {
    timeField: "ts",
    metaField: "sensor",
    granularity: "minutes"
  },
  expireAfterSeconds: 60 * 60 * 24 * 90   // 90일 TTL
});

2. 동작

같은 sensor의 데이터를 시간 bucket으로 묶어 저장. 저장 시 자동 columnar compress(ZSTD). 사용자는 일반 collection처럼 insert/query만 하면 된다.

3. 성능

워크로드일반 컬렉션시계열
insert/s62K180K
최근 1h range query1.2s0.09s
디스크/일1TB150GB

4. 인덱스

db.metrics.createIndex({ "sensor.id": 1, ts: 1 })
db.metrics.createIndex({ ts: 1 })

metaField 인덱스가 핵심. 인덱스 자체도 bucket 단위라 일반 인덱스 대비 1/8 크기.

5. Aggregation

db.metrics.aggregate([
  { $match: { ts: { $gte: ISODate("2026-05-22") } } },
  { $group: {
      _id: { sensor: "$sensor.id", h: { $hour: "$ts" } },
      avgTemp: { $avg: "$temp" }
  }}
])

6. 샤딩

샤드 키는 metaField + timeField 조합 권장. 같은 센서 데이터가 같은 샤드에 모이면 range query가 한 샤드에서 끝남. 8.0부터 시계열 샤딩 안정.

7. 함정

  • granularity 잘못 선택 시 bucket 효율 폭락 — 평균 측정 주기와 매칭
  • update/delete는 8.0에서 더 자유로워졌지만 여전히 비용 큼 — 시계열엔 immutable 권장
  • compound index 제한이 일반 컬렉션보다 까다로움

자주 묻는 질문

Q. Timescale·InfluxDB와 비교? 순수 TSDB가 일부 워크로드에서 더 효율적이지만 운영 도구를 하나로 묶을 수 있는 가치가 큼. 기존 Mongo 사용자라면 강력 추천.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록