mongodb 시계열 데이터몽고디비 시계열 데이터mongodb time series data시계열 데이터란?backend

MongoDB 시계열 데이터(Time Series) 알아보기

KUKJIN LEE
KUKJIN LEE
2024년 10월 22일
342

시계열 데이터(Time Series Data)는 시간이 지나면서 변화하는 데이터를 의미합니다. 온도, 주식 가격, 기계의 상태 등 시간이 중요한 역할을 하는 모든 데이터를 포함할 수 있습니다. MongoDB는 시계열 데이터를 효율적으로 처리할 수 있는 기능을 제공합니다.

 

1. 시계열 데이터란?

시계열 데이터는 각 데이터 포인트가 특정 시간에 측정된 정보를 의미합니다. 예를 들어, 주식의 가격이 분, 초, 밀리초 단위로 계속 변한다고 할 때, 각 변화를 기록하는 것이 시계열 데이터입니다.

시계열 데이터 예시

{
  "timestamp": ISODate("2024-01-01T00:00:00Z"),
  "device": "temperature_sensor_1",
  "temperature": 22.5
}

2024년 1월 1일 00:00:00온도 센서 1에서 측정된 온도가 22.5도임을 확인 할 수 있습니다.

 

2. 시계열 데이터를 위한 MongoDB 컬렉션 생성

MongoDB에서는 시계열 데이터를 효율적으로 관리하기 위해 시계열 컬렉션(Time Series Collection)을 제공합니다. 이 컬렉션은 시간 기반의 데이터를 더 빠르게 저장하고 검색할 수 있도록 도와줍니다.

컬렉션 생성 예시

db.createCollection("temperatureReadings", {
    timeseries: {
        timeField: "timestamp",      // 시간 필드 지정
        metaField: "device",         // 기기 정보를 저장할 메타 데이터 필드
        granularity: "minutes"       // 데이터 수집 주기 (분 단위)
    }
});
  • timeField: 데이터의 시간을 나타내는 필드를 지정합니다. 이 필드가 있어야 MongoDB가 데이터를 시계열로 인식합니다.

  • metaField: 장치 ID나 위치와 같은 메타 정보를 저장할 필드를 지정합니다.

  • granularity: 데이터 수집 빈도를 설정할 수 있습니다. 여기서는 분 단위로 데이터를 수집합니다.

 

3. 시계열 데이터 삽입

MongoDB 시계열 컬렉션에 데이터를 삽입하는 방식은 일반 컬렉션과 거의 동일합니다. 데이터를 계속해서 기록하는 장치(예: 온도 센서)가 있다고 가정하고, 그 데이터를 MongoDB에 삽입해 봅시다.

(Excel로 자료 덤프를 하지 않는 이상 아래와 같이 추가하는 경우는 없었습니다.)

데이터 삽입 예시

db.temperatureReadings.insertMany([
    { "timestamp": ISODate("2024-01-01T00:00:00Z"), "device": "temperature_sensor_1", "temperature": 22.5 },
    { "timestamp": ISODate("2024-01-01T00:01:00Z"), "device": "temperature_sensor_1", "temperature": 22.6 }
]);

 

4. 시계열 데이터 쿼리

MongoDB에서는 시계열 데이터를 쉽게 검색할 수 있습니다. 보통 시간 범위를 지정하여 데이터를 조회하는 경우가 많습니다.

특정 시간 범위 내의 데이터 조회 예시

db.temperatureReadings.find({
    timestamp: {
        $gte: ISODate("2024-01-01T00:00:00Z"),
        $lt: ISODate("2024-01-01T01:00:00Z")
    },
    device: "temperature_sensor_1"
});

5. 오래된 데이터 자동 삭제(TTL 기능)

시계열 데이터는 시간이 지나면 더 이상 필요하지 않거나 중요하지 않은 경우가 많습니다. MongoDB는 오래된 데이터를 자동으로 삭제하는 기능을 제공합니다. 이를 통해 데이터베이스 크기를 관리하고 성능을 유지할 수 있습니다.

오래된 데이터 자동 삭제 설정(TTL)

db.temperatureReadings.createIndex({ timestamp: 1 }, { expireAfterSeconds: 3600 });

 

MongoDB에서 시계열 데이터는 시간에 따라 변화하는 데이터를 효율적으로 저장하고 조회할 수 있도록 도와줍니다. 시계열 컬렉션을 사용하면 대규모 데이터를 쉽게 관리할 수 있습니다. (온도 센서, 날씨 기록, 주식 시장 데이터 등)에서 시계열 데이터를 활용하면 방대한 데이터를 쉽게 처리하고 관리할 수 있습니다.

관련 글

[SQL 입문] 필요한 데이터만 콕 집어 가져올 수 있는 WHERE 절

사용자는 테이블에 있는 모든 데이터를 다 보고 싶어 하지는 않습니다. 오히려 특정 항목에 대한 데이터만 가져오고 싶을 때가 훨씬 많습니다. 예를 들어, 어떤 사용자의 이메일이나 ID는 알고 있는데, 그 사람이 언제 우리 앱에 가입했는지 확인하고 싶다고 가정해 봅시다...

2026년 1월 27일10

SQL에서 SELECT란 무엇인가?

데이터베이스를 거대한 서류 보관함이라고 생각하면 됩니다. 보관함 안에는 수많은 데이터가 차곡차곡 쌓입니다. SELECT는 이 보관함에서 "내가 원하는 정보를 찾아줘!"라고 요청하는 명령어입니다. 이 과정을 전문 용어로 '쿼리(Query)'라고 부릅니다. &nbs...

2026년 1월 26일10

[SQL 기초] "언제 하나씩 다 넣어?" 데이터 한 번에 넣기

개발을 하다 보면 데이터베이스(DB)에 샘플 데이터를 대량으로 넣어야 할 때가 있습니다. 메뉴 100개를 추가해야 하는데 INSERT 문을 100번 쓰고 있다면? 너무 비효율적이죠! 오늘은 SQL에서 여러 데이터를 한 번에 넣는 '다중 삽입(Multiple Inse...

2026년 1월 21일13

SQL 데이터 삽입하기

데이터가 없는 데이터베이스는 연료 없는 로켓과 같습니다. 이제 'Missions' 테이블에 새로운 행(row)을 추가하는 방법을 알아보겠습니다. "삽입(Inserting)"은 '데이터 추가'를 의미합니다. 기존 Missions 테이블 ...

2026년 1월 20일12