Time Series 컬렉션으로 데이터 마이그레이션
이 페이지에서는 집계 파이프라인을 사용하여 Time Series 컬렉션으로 데이터를 마이그레이션하는 방법을 설명합니다. 또는 MongoDB Relational Migrator를 사용하여 Time Series 컬렉션으로 데이터를 마이그레이션 하는 방법을 알아보려면 MongoDB Relational Migrator를 사용한 Time Series 컬렉션 구성을 참조하세요.
이 작업에 대하여
MongoDB 버전 7.0부터는 $out
집계 단계를 사용하여 기존 컬렉션 의 데이터를 Time Series 컬렉션으로 마이그레이션 할 수 있습니다. 컬렉션에 시간 간격에 따라 비교하려는 데이터를 저장하는 경우 성능 및 저장 효율성을 개선하기 위해 Time Series 컬렉션을 사용하는 것이 좋습니다. Time Series 컬렉션의 이점에 대한 자세한 내용은 Time Series 컬렉션을 참조하세요.
시작하기 전에
시간 및 메타데이터 정보를 포함하는 weatherdata
컬렉션을 고려해 보세요.
db.weatherdata.insertOne( { _id: ObjectId("5553a998e4b02cf7151190b8"), st: "x+47600-047900", ts: ISODate("1984-03-05T13:00:00Z"), position: { type: "Point", coordinates: [ -47.9, 47.6 ] }, elevation: 9999, callLetters: "VCSZ", qualityControlProcess: "V020", dataSource: "4", type: "FM-13", airTemperature: { value: -3.1, quality: "1" }, dewPoint: { value: 999.9, quality : "9" }, pressure: { value: 1015.3, quality: "1" }, wind: { direction: { angle: 999, quality: "9" }, type: "9", speed: { rate: 999.9, quality: "9" } }, visibility: { distance: { value: 999999, quality : "9" }, variability: { value: "N", quality: "9" } }, skyCondition: { ceilingHeight: { value: 99999, quality: "9", determination: "9" }, cavok: "N" }, sections: [ "AG1" ], precipitationEstimatedObservation: { discrepancy: "2", estimatedWaterDepth: 999 } } )
단계
선택 사항. 메타데이터 필드를 만듭니다.
컬렉션에 모든 메타데이터가 포함된 특정 필드가 없는 경우 데이터를 변환하여 해당 필드를 정의합니다.
다음 파이프라인 단계에서는 metaData
필드를 추가하고 $project
를 사용하여 문서에서 나머지 필드를 포함하거나 제외합니다. 이 예제에서 metaData
필드는 사용자가 만든 Time Series 컬렉션의 metaField
가 됩니다.
참고
올바른 필드를 Time Series metaField
로 선택하면 스토리지와 쿼리 성능이 모두 최적화됩니다. metaField
선택 및 모범 사례에 대한 자세한 내용은 metaFields를 참조하세요.
{ $addFields: { metaData: { st: "$st", position: "$position", elevation: "$elevation", callLetters: "$callLetters", qualityControlProcess: "$qualityControlProcess", type: "$type" } }, }, { $project: { _id: 1, ts: 1, metaData: 1, dataSource: 1, airTemperature: 1, dewPoint: 1, pressure: 1, wind: 1, visibility: 1, skyCondition: 1, sections: 1, precipitationEstimatedObservation: 1 } }
Time Series 컬렉션을 생성하고 데이터를 삽입합니다.
아래 예제에서는 다음 작업을 수행합니다.
$addFields
집계 단계를 사용하여weather_data
컬렉션에metaData
필드를 추가합니다.$out
집계 단계를timeseries
옵션과 함께 사용하여mydatabase
데이터베이스에weathernew
Time Series 컬렉션을 생성합니다.weathernew
컬렉션의metaField
를metaData
필드로 정의합니다.weathernew
컬렉션의timeField
를ts
필드로 정의합니다.
참고
Time Series 컬렉션의 timeField
는 날짜 유형이어야 합니다.
db.weather_data.aggregate( [ { $addFields: { metaData: { st: "$st", position: "$position", elevation: "$elevation", callLetters: "$callLetters", qualityControlProcess: "$qualityControlProcess", type: "$type" } }, }, { $project: { _id: 1, ts: 1, metaData: 1, dataSource: 1, airTemperature: 1, dewPoint: 1, pressure: 1, wind: 1, visibility: 1, skyCondition: 1, sections: 1, precipitationEstimatedObservation: 1 } }, { $out: { db: "mydatabase", coll: "weathernew", timeseries: { timeField: "ts", metaField: "metaData" } } } ] )
집계 단계 구문은 $out
을 참조하세요. time series 옵션에 대한 전체 설명은 time series 필드 참조를 참조하세요.
이 집계 파이프라인을 실행한 후 findOne()
을 사용하여 weathernew
Time Series 컬렉션의 문서를 볼 수 있습니다.
db.weathernew.findOne()
연산은 다음 문서를 반환합니다.
{ _id: ObjectId("5553a998e4b02cf7151190b8"), ts: ISODate("1984-03-05T13:00:00Z"), metaData: { st: "x+47600-047900", position: { type: "Point", coordinates: [ -47.9, 47.6 ] }, elevation: 9999, callLetters: "VCSZ", qualityControlProcess: "V020", type: "FM-13" }, dataSource: "4", airTemperature: { value: -3.1, quality: "1" }, dewPoint: { value: 999.9, quality: "9" }, pressure: { value: 1015.3, quality: "1" }, wind: { direction: { angle: 999, quality: "9" }, type: "9", speed: { rate: 999.9, quality: "9" } }, visibility: { distance: { value: 999999, quality: "9" }, variability: { value: "N", quality: "9" } }, skyCondition: { ceilingHeight: { value: 99999, quality: "9", determination: "9" }, cavok: "N" }, sections: [ "AG1" ], precipitationEstimatedObservation: { discrepancy: "2", estimatedWaterDepth: 999 } }
다음 단계
원래 컬렉션에 세컨더리 인덱스가 있는 경우 지금 수동으로 다시 생성합니다.
Time Series 컬렉션에 1970-01-01T00:00:00.000Z
이전 또는 2038-01-19T03:14:07.000Z
이후의 timeField
값이 포함되어 있는 경우 MongoDB는 경고를 기록하고 내부 클러스터형 인덱스를 활용하는 일부 쿼리 최적화를 비활성화합니다. 쿼리 성능을 회복하고 로그 경고를 해결하려면 timeField
에 보조 인덱스를 생성하세요.