티스토리 뷰

728x90

 

Mongodb 6.0 Timeseries 이란?

 

최신 버전인 MongoDB 6.0시계열(Time Series) 데이터를 처리하는 데 매우 적합한 기능을 제공합니다. 이전 버전의 MongoDB에서도 시계열 데이터를 저장하고 검색하는 것이 가능했지만, MongoDB 6.0에서는 이러한 작업을 훨씬 더 쉽게 처리할 수 있습니다.

 

MongoDB 6.0에서는 시계열 데이터를 위한 전용 컬렉션 타입인 Time Series Collection을 도입했습니다. 이 컬렉션은 일련의 타임스탬프와 해당 타임스탬프에 대한 값을 가지고 있습니다. 이전 버전의 MongoDB에서는 시간대별로 컬렉션을 분리하거나 필드를 추가하는 등의 방법으로 시계열 데이터를 처리했지만, 이제는 Time Series Collection을 사용하여 더욱 효율적으로 처리할 수 있습니다.

 

또한, MongoDB 6.0에서는 시계열 데이터에 대한 집계(aggregation) 기능도 개선되었습니다. 시간 간격별로 그룹화하거나, 특정 기간 내의 데이터만 검색하는 등 다양한 집계 작업을 수행할 수 있습니다.

 

MongoDB 6.0시계열 데이터 처리 기능은 IoT, 로그 데이터 등 다양한 분야에서 유용하게 사용될 것으로 예상됩니다.

 

 

Time Series Collection 생성 방법

 

Time Series Collection을 생성하려면, MongoDB 5.0 이상이 설치된 상태에서 다음과 같은 명령을 실행하면 됩니다.

* 필자는 6.0 기준으로 작성 하겠습니다.

 

db.createCollection("collection_name", {
  timeseries: {
    timeField: "timestamp_field_name",
    metaField: "metadata_field_name"
  }
})

 

위의 명령에서는 collection_name은 생성할 컬렉션의 이름, timestamp_field_name은 시간 정보를 담고 있는 필드의 이름, metadata_field_name은 메타데이터 정보를 담고 있는 필드의 이름을 각각 지정해주어야 합니다.

 

예를 들어, sensor_data라는 이름의 시계열 데이터를 저장할 컬렉션을 생성하고 싶다면 다음과 같은 명령을 실행하면 됩니다.

db.createCollection("sensor_data", {
  timeseries: {
    timeField: "timestamp",
    metaField: "metadata"
  }
})

 

위의 명령은 sensor_data라는 이름의 컬렉션을 생성하고, timestamp 필드에 시간 정보를, metadata 필드에 메타데이터 정보를 저장하도록 설정합니다.

 

 

Time Series Collection Insert 방법

 

Time Series Collection에 데이터를 삽입하려면 insertOne 또는 insertMany 메서드를 사용합니다. 이 예제에서는 insertOne 메서드를 사용합니다.

db.sensor_data.insertOne({
  timestamp: new Date(),
  metadata: {
    sensor_id: "sensor_001",
    location: "Room 101"
  },
  value: {
    temperature: 25.3,
    humidity: 60.1
  }
})

이 예제에서는 현재 시간을 Timestamp로 사용하고, metadata 필드로 sensor_idlocation을 지정합니다. value 필드에는 측정한 온도와 습도를 저장합니다.

 

 

 

Time Series Collection 조회 방법

 

Time Series Collection에서 데이터를 조회하는 방법은 일반적인 MongoDB 쿼리와 매우 유사합니다. 시간 정보를 기반으로 데이터를 검색하고 집계하는 방법 등에 대한 자세한 내용은 MongoDB의 공식 문서를 참고하시면 됩니다.

 

다음은 sensor_data 컬렉션에서 2023320일부터 21일까지의 데이터를 조회하는 예제입니다.

db.sensor_data.find({
  timestamp: {
    $gte: new Date("2023-03-20"),
    $lt: new Date("2023-03-22")
  }
})

 

위의 쿼리는 timestamp 필드가 2023320일부터 21일까지의 범위에 속하는 데이터를 모두 검색합니다.

 

또한, MongoDB 6.0에서는 시계열 데이터를 위한 전용 집계 함수인 $timeSeriesAggregate도 제공됩니다. 이 함수를 사용하면 시간 간격별로 그룹화하거나, 특정 기간 내의 데이터만 검색하는 등 다양한 집계 작업을 수행할 수 있습니다.

 

다음은 $timeSeriesAggregate 함수를 사용하여 2023320일부터 21일까지의 데이터를 5분 단위로 그룹화하는 예제입니다.

db.sensor_data.aggregate([
  {
    $match: {
      timestamp: {
        $gte: new Date("2023-03-20"),
        $lt: new Date("2023-03-22")
      }
    }
  },
  {
    $timeSeries: {
      timeField: "timestamp",
      interval: "5 minutes"
    }
  },
  {
    $group: {
      _id: "$bucket",
      avg_value: { $avg: "$value" }
    }
  }
])

 

위의 쿼리는 다음과 같은 작업을 수행합니다.

1. $match 스테이지를 사용하여 2023320일부터 21일까지의 데이터를 필터링합니다.
2. $timeSeries 스테이지를 사용하여 5분 간격으로 데이터를 그룹화합니다.
3. $group 스테이지를 사용하여 각 그룹에서 value 필드의 평균값을 계산합니다.

$timeSeriesAggregate 함수는 $match 스테이지와 $group 스테이지를 함께 사용하여 데이터를 필터링하고 집계하는 것이 일반적입니다. 필요에 따라 다른 스테이지도 추가할 수 있습니다.

728x90
댓글
250x250
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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
글 보관함