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

KUKJIN LEE's profile picture

KUKJIN LEE1개월 전 작성

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

New Tech Posts