시계열 컬렉션

시계열 컬렉션 (Time Series)

시계열 데이터는 시간의 흐름에 따른 변화를 분석해서 인사이트를 얻는 데이터 포인트의 연속이에요. 주식 가격, 날씨 온도, 웹사이트 방문자 수처럼 시간이 지나면서 값이 변하는 데이터가 전형적인 예시죠. 이런 데이터를 효율적으로 저장하기 위해 MongoDB가 제공하는 것이 바로 시계열 컬렉션이에요.

출처: Time Series (공식 문서)

본문

시계열 데이터의 구성 요소

시계열 데이터는 보통 네 가지로 나눠져요.

  • 시간(Time) — 데이터 포인트가 기록된 시점이에요.
  • 메타데이터(Metadata) — 데이터 시리즈를 식별하는 라벨이나 태그로, 잘 변하지 않아요. metaField에 저장되며, 컬렉션을 만든 뒤에는 이 필드를 추가할 수 없어요. source라고도 불러요.
  • 메트릭(Metrics) — 일정 간격으로 측정되는 개별 데이터 포인트예요. 시간에 따라 변하는 키-값 쌍으로 표현되는 경우가 많아요. values라고도 불러요.
  • 측정(Measurements) — 특정 시점의 모든 메트릭을 담은 문서예요. 그 순간의 시간, 메타데이터, 모든 메트릭을 포함해요.

예를 들어 날씨 데이터의 측정 문서는 이렇게 생겼어요.

{
  "timestamp": ISODate("2025-08-19T12:00:00Z"),
  "metaField": {
    "sensorId": "A1234",
    "location": {
      "city": "New York",
      "state": "NY"
    }
  },
  "temperature": 25.4,
  "humidity": 48.2,
  "pressure": 1012.5,
  "windSpeed": 5.2,
  "windDirection": "NW"
}

시계열 컬렉션이 뭘 좋게 해주나요

시계열 컬렉션은 버전 5.0에서 새로 도입됐어요. 같은 소스의 데이터를 비슷한 시점의 다른 데이터와 가깝게 저장하도록 쓰기를 정리해서, 일반 컬렉션보다 쿼리 효율이 좋고 시계열 데이터와 보조 인덱스의 디스크 사용량을 줄여줘요.

시계열 컬렉션은 내부적으로 컬럼형 저장 형식을 쓰고 데이터를 시간순으로 저장해요. 여기서 얻는 이점은 이래요.

  • 시계열 데이터를 다루는 복잡도 감소
  • 쿼리 효율 향상
  • 디스크 사용량 감소
  • 읽기 연산의 I/O 감소
  • WiredTiger 캐시 사용량 증가

MongoDB 6.3부터는 새 시계열 컬렉션에 대해 시간과 메타데이터 필드의 복합 인덱스도 자동으로 만들어 줘요.

언제 쓰면 좋을까요

시계열 컬렉션은 시간에 따른 분석에 최적이에요.

  • IoT — 센서 데이터, 머신러닝·AI 스크래핑
  • 금융 — 고빈도 트레이딩, 금융 정량 분석, 은행 데이터, 주식 데이터
  • 리테일·이커머스 — 거래·판매·가격 분석, 재고 관리
  • DevOps — 애플리케이션 로깅, 인프라·네트워크 모니터링

반면 순서가 없는 데이터나 시간에 의존하지 않는 데이터는 시계열 컬렉션에 어울리지 않아요.

동작 방식

시계열 컬렉션은 대체로 다른 MongoDB 컬렉션처럼 동작해요. 다만 업데이트 명령의 매치 표현식은 metaField만 지정할 수 있어요. 다른 필드는 업데이트할 수 없어요.

MongoDB는 시계열 컬렉션을 내부 컬렉션으로 뒷받침되는 '쓰기 가능한 비구체화(non-materialized) 뷰'로 취급해요. 데이터를 넣으면 내부 컬렉션이 시계열 데이터를 최적화된 저장 형식으로 자동 정리해요.

MongoDB 6.3부터 새 시계열 컬렉션을 만들면 metaFieldtimeField 필드에 복합 인덱스도 함께 생성돼요. 쿼리는 이 복합 인덱스를 사용해 성능을 높이죠.

한 가지 주의할 점이 있어요. MongoDB 8.0부터 시계열 컬렉션에서 timeField를 포함한 샤드 키는 deprecated예요. timeField를 샤드 키로 쓰는 컬렉션은 metaField로 리샤딩해야 해요.

metaField와 인덱스

시계열 문서는 metaField를 가질 수 있어요. MongoDB는 이 필드로 문서를 묶어 저장 최적화와 쿼리 효율을 높여요. 그리고 시계열 컬렉션의 metaFieldtimeField에는 복합 인덱스를 자동 생성해요.

존 샤딩(Zone Sharding)은 시계열 컬렉션을 지원하지 않아요. 밸런서가 샤딩된 시계열 컬렉션의 데이터를 클러스터의 모든 샤드에 항상 고르게 분배하죠.

더 알아보기