일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 카카오 면접
- 이펙티브자바
- 스프링 핵심원리
- kubernetes
- 자바
- 엘라스틱서치
- 알고리즘정렬
- 이펙티브 자바
- Spring
- 스프링
- 알고리즘
- Effective Java
- 자바스크립트
- 예제로 배우는 스프링 입문
- 스프링부트
- 김영한
- 카카오
- 코딩테스트
- 티스토리챌린지
- 클린아키텍처
- Effective Java 3
- JavaScript
- k8s
- 스프링핵심원리
- 이차전지관련주
- Sort
- java
- effectivejava
- ElasticSearch
- 오블완
- Today
- Total
Kim-Baek 개발자 이야기
MongoDB Time Series Collection (몽고DB 시계열 컬렉션)란? 본문
MongoDB Time Series Collection (몽고DB 시계열 컬렉션)란?
MongoDB는 5.0 버전부터 **Time Series Collection(시계열 컬렉션)**을 제공하여 시계열 데이터(시간 기반 데이터)를 효율적으로 저장, 인덱싱, 분석할 수 있도록 지원합니다.
💡 MongoDB의 Time Series Collection은 일반 컬렉션과 다르게 데이터를 시간 중심으로 최적화하여 저장하는 기능을 제공하며, 기존 RDBMS 기반의 Time Series DB와 차별화된 유연성을 갖습니다.
1️⃣ MongoDB Time Series Collection의 특징
✅ 시계열 데이터 최적화
- 데이터를 자동으로 압축 및 그룹핑하여 저장 공간을 절약
- 읽기 및 분석 성능 향상
✅ 자동화된 시계열 인덱싱
- 시간(timestamp) 필드를 기반으로 인덱싱 최적화
- 데이터 삽입 시 자동으로 시계열 특화 구조로 저장
✅ 빠른 Aggregation (집계) 연산
- time bucket(시간 단위 그룹핑) 기능 제공
- 최대값, 최소값, 평균, 표준편차 등 계산을 빠르게 수행
✅ 자동 데이터 분할 및 삭제 (TTL 지원)
- 일정 시간이 지나면 자동으로 데이터 삭제 가능 (expireAfterSeconds 설정)
- 데이터 보관 비용 절감
✅ NoSQL의 유연한 데이터 구조
- 기존 Time Series DB보다 더 유연하게 데이터 모델링 가능
- JSON 기반 문서 저장 방식으로 다양한 데이터 유형 저장 가능
✅ 기존 MongoDB와 호환성 유지
- 일반 컬렉션처럼 MongoDB의 강력한 쿼리 기능(Aggregation, Indexing 등)을 그대로 사용 가능
2️⃣ MongoDB Time Series Collection vs 일반 컬렉션
비교 항목 MongoDB Time Series Collection 일반 MongoDB Collection
저장 구조 | 시간(timestamp) 필드를 중심으로 최적화된 저장 방식 | 문서(Document) 단위 저장 |
인덱스 | 자동으로 timestamp 기반 인덱싱 | 수동으로 인덱스 추가 필요 |
성능 | 시계열 데이터 분석 및 집계에 최적화됨 | 범용 데이터 저장 및 쿼리 수행 |
데이터 삭제 | expireAfterSeconds로 자동 삭제 가능 | 명시적으로 deleteMany() 실행 필요 |
스토리지 효율 | 자동 압축 및 시간 기반 그룹핑 | 문서 개별 저장으로 다소 비효율적 |
💡 즉, Time Series Collection은 timestamp를 중심으로 데이터를 다룰 때 MongoDB에서 훨씬 더 강력한 성능을 발휘할 수 있습니다!
3️⃣ MongoDB Time Series Collection 생성 방법
✅ 1. Time Series Collection 생성
MongoDB에서는 createCollection()을 사용할 때 time series 옵션을 추가하여 시계열 컬렉션을 생성할 수 있습니다.
db.createCollection("sensor_data", {
timeseries: {
timeField: "timestamp", // 필수: 시간 필드 지정
metaField: "metadata", // 선택: 센서 ID 등 메타데이터 저장
granularity: "seconds" // 선택: 시간 단위 (seconds, minutes, hours)
},
expireAfterSeconds: 31536000 // 선택: 1년(365일) 후 데이터 자동 삭제
});
📌 설명:
- timeField: 시간 필드를 지정 (필수)
- metaField: 센서 ID, 위치 등의 메타데이터 필드 추가 (선택)
- granularity: 데이터 수집 빈도에 따라 설정 (seconds, minutes, hours)
- expireAfterSeconds: 일정 시간이 지나면 데이터 자동 삭제 (TTL 기능)
✅ 2. 데이터 삽입 (Insert)
시계열 컬렉션에 데이터를 추가하는 방식은 일반 MongoDB와 동일합니다.
db.sensor_data.insertMany([
{
timestamp: new Date("2025-01-20T10:00:00Z"),
metadata: { sensorId: "A123", location: "Seoul" },
temperature: 23.5,
humidity: 55
},
{
timestamp: new Date("2025-01-20T10:01:00Z"),
metadata: { sensorId: "A123", location: "Seoul" },
temperature: 23.7,
humidity: 54
}
]);
📌 설명:
- timestamp 필드 값은 반드시 날짜 형식(ISODate 또는 new Date())이어야 함
- metadata 필드는 선택적으로 사용할 수 있으며, 쿼리 필터링에 유용
✅ 3. 데이터 조회 및 집계 (Aggregation)
(1) 최근 1시간 동안 센서별 평균 온도 조회
db.sensor_data.aggregate([
{ $match: { timestamp: { $gte: new Date(Date.now() - 3600 * 1000) } } },
{ $group: { _id: "$metadata.sensorId", avgTemp: { $avg: "$temperature" } } }
]);
💡 설명:
- $match: 최근 1시간 동안의 데이터만 필터링
- $group: sensorId별 평균 온도 계산
(2) 10분 단위로 온도 평균 계산
db.sensor_data.aggregate([
{ $bucketAuto: { groupBy: "$timestamp", buckets: 6, output: { avgTemp: { $avg: "$temperature" } } } }
]);
💡 설명:
- $bucketAuto: MongoDB가 자동으로 시간 구간을 나누어 집계 수행
- 온도(temperature)의 평균 값을 6개의 그룹으로 나누어 계산
✅ 4. 데이터 자동 삭제 설정 (TTL 기능)
MongoDB Time Series Collection은 일정 시간이 지나면 **자동으로 데이터를 삭제하는 기능(TTL, Time-To-Live)**을 제공합니다.
db.createCollection("sensor_data", {
timeseries: {
timeField: "timestamp",
granularity: "minutes"
},
expireAfterSeconds: 2592000 // 30일 후 데이터 자동 삭제 (30 * 24 * 60 * 60)
});
📌 설명:
- expireAfterSeconds: 2592000 → 30일이 지나면 자동으로 데이터 삭제
- 로그 데이터, 모니터링 데이터처럼 일정 기간 이후 불필요한 데이터를 자동 정리하는 데 유용
4️⃣ MongoDB Time Series Collection의 장점
✅ 대량의 시계열 데이터 효율적 저장
- 자동 압축 및 인덱싱을 통해 저장 공간을 절약하고 성능을 향상
✅ 빠른 쿼리 및 집계 성능
- timeField 기반 자동 인덱싱을 활용하여 대량의 데이터를 빠르게 조회
✅ 자동 데이터 보관 정책 (TTL)
- 일정 시간이 지나면 데이터 자동 삭제 가능 → 스토리지 비용 절감
✅ NoSQL 기반의 유연한 데이터 구조
- JSON 문서 저장 방식으로 다양한 센서 데이터, 로그 데이터, 모니터링 데이터를 유연하게 저장
✅ 기존 MongoDB 기능과 완벽 호환
- 기존 MongoDB의 강력한 쿼리 및 집계 기능을 그대로 사용 가능
5️⃣ MongoDB Time Series Collection을 언제 사용할까?
✅ 센서 데이터 저장 및 분석
- IoT 기기에서 수집한 온도, 습도, 기압 등의 데이터를 저장
✅ 서버 로그 및 모니터링 데이터 관리
- 시스템 로그, API 요청 기록, 트래픽 분석 등의 데이터 처리
✅ 금융 데이터 및 주식 시세 기록
- 주식 가격 변동, 암호화폐 거래 내역, 금융 거래 기록 저장
✅ 실시간 데이터 스트리밍 및 분석
- 실시간 사용자 활동 분석, 네트워크 트래픽 모니터링
6️⃣ 결론: MongoDB Time Series Collection이 강력한 이유
✅ MongoDB의 기존 기능을 유지하면서도, Time Series에 최적화된 성능 제공
✅ 대량의 시계열 데이터를 효율적으로 저장하고, 빠르게 분석 가능
✅ TTL 기능을 활용해 자동 데이터 정리 가능
✅ IoT, 금융, 서버 모니터링, 로그 분석 등 다양한 분야에서 활용 가능
💡 MongoDB를 사용하면서 시계열 데이터도 함께 다루고 싶다면 Time Series Collection을 적극 활용해보세요! 🚀
'컴퓨터 공학 > DB' 카테고리의 다른 글
MongoDB에서 Time Series 기능을 사용하지 않고 일반 컬렉션을 활용하는 것과의 차이점 (0) | 2025.01.21 |
---|---|
Time Series DB 란? (0) | 2025.01.20 |
MongoDB Audit (1) | 2024.12.10 |
RDB, NoSQL, CAP, PACELC, ACID, 정규화 (0) | 2020.10.13 |