Time Series 컬렉션
이 페이지의 내용
버전 5.0에 추가.
Time series 컬렉션 은 일정 기간 동안의 측정 시퀀스를 효율적으로 저장합니다. 시계열 데이터는 시간이 지남에 따라 수집되며 하나 이상의 변경되지 않는 매개변수로 고유하게 식별되는 모든 데이터입니다. Time Series 데이터를 식별하는 불변의 매개변수는 일반적으로 데이터 소스의 메타데이터입니다.
예시 | 측정 | Metadata |
---|---|---|
날씨 데이터 | 온도 | 센서 식별자, 위치 |
주식 데이터 | 주식 가격 | 주식 시세, 거래소 |
웹사이트 방문자 | 조회 수 | URL |
Time Series 컬렉션
버전 5.0에 추가.
시계열 컬렉션은 시계열 데이터를 효율적으로 저장합니다. 시계열 컬렉션에서는 동일한 출처의 데이터가 비슷한 시점의 다른 데이터 포인트와 함께 저장되도록 쓰기가 구성됩니다.
MongoDB Atlas에서 호스팅되는 배포를 위해 UI에서 time series 컬렉션을 생성할 수 있습니다.
혜택
일반 컬렉션과 비교하여 시계열 데이터를 시계열 컬렉션에 저장하면 쿼리 효율성이 향상되고 시계열 데이터 및 세컨더리 인덱스의 디스크 사용량이 줄어듭니다.
절차
Time Series 컬렉션 만들기
참고
featureCompatibilityVersion 이 5.0 으로 설정된 시스템에서만 time series 컬렉션을 만들 수 있습니다.
time series 컬렉션에 데이터를 삽입하려면 먼저 db.createCollection()
메서드 또는 create
명령을 사용하여 collection을 명시적으로 생성해야 합니다.
db.createCollection( "weather", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "hours" } } )
time series 컬렉션을 만들 때 다음 옵션을 지정합니다.
필드 | 유형 | 설명 |
---|---|---|
| 문자열 | 필수입니다. 각 time series 문서에서 날짜를 포함하는 필드의 이름입니다. time series 컬렉션의 문서에는 |
| 문자열 | 선택 사항입니다. 각 time series 문서에 메타데이터가 포함된 필드의 이름입니다. 지정된 필드의 메타데이터는 고유한 문서 시리즈에 레이블을 지정하는 데 사용되는 데이터여야 합니다. 메타데이터는 거의 변경되지 않아야 합니다. 지정한 필드의 이름이 |
| 문자열 | 선택 사항. 가능한 값은 Time Series 컬렉션의 데이터가 내부적으로 저장되는 방식을 최적화하여 성능을 향상시키려면
|
| 숫자 | 선택 사항. 문서가 만료되기 전까지의 시간(초)을 지정하여 time series collection 문서를 자동으로 삭제할 수 있습니다. MongoDB는 만료된 문서를 자동으로 삭제합니다. 자세한 내용 은 time series 컬렉션(TTL)에 대한 자동 제거 설정을 참조하세요. |
timeseries
옵션과 함께 허용되는 다른 옵션은 다음과 같습니다.
storageEngine
indexOptionDefaults
collation
writeConcern
comment
경고
MongoDB Server가 충돌하므로 system.profile
이라는 이름의 time series 컬렉션 또는 뷰를 만들려고 시도하지 마세요.
Time Series 컬렉션에 측정값 삽입
삽입하는 각 문서에는 단일 측정값이 포함되어야 합니다. 한 번에 여러 문서를 삽입하려면 다음 명령을 실행합니다.
db.weather.insertMany( [ { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T00:00:00.000Z"), "temp": 12 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T04:00:00.000Z"), "temp": 11 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T08:00:00.000Z"), "temp": 11 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T12:00:00.000Z"), "temp": 12 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T16:00:00.000Z"), "temp": 16 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T20:00:00.000Z"), "temp": 15 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T00:00:00.000Z"), "temp": 13 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T04:00:00.000Z"), "temp": 12 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T08:00:00.000Z"), "temp": 11 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T12:00:00.000Z"), "temp": 12 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T16:00:00.000Z"), "temp": 17 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T20:00:00.000Z"), "temp": 12 } ] )
단일 문서를 삽입하려면 db.collection.insertOne()
방법을 사용합니다.
시계열 컬렉션 쿼리
time series 컬렉션에서 하나의 문서를 검색하려면 다음 명령을 실행합니다.
db.weather.findOne({ "timestamp": ISODate("2021-05-18T00:00:00.000Z") })
Time Series 컬렉션에서 집계 실행
추가 쿼리 기능을 사용하려면 다음과 같은 집계 파이프라인을 사용하십시오.
db.weather.aggregate( [ { $project: { date: { $dateToParts: { date: "$timestamp" } }, temp: 1 } }, { $group: { _id: { date: { year: "$date.year", month: "$date.month", day: "$date.day" } }, avgTmp: { $avg: "$temp" } } } ] )
예시된 집계 파이프라인은 모든 문서를 측정 날짜별로 그룹화한 다음, 해당 날짜의 모든 온도 측정값의 평균을 반환합니다.
{ "_id" : { "date" : { "year" : 2021, "month" : 5, "day" : 18 } }, "avgTmp" : 12.714285714285714 } { "_id" : { "date" : { "year" : 2021, "month" : 5, "day" : 19 } }, "avgTmp" : 13 }
컬렉션이 Time Series 유형인지 확인
컬렉션이 Time Series 유형인지 확인하려면 listCollections 명령을 사용하세요.
db.runCommand( { listCollections: 1.0 } )
컬렉션이 time series 컬렉션인 경우 다음을 반환합니다.
{ cursor: { id: <number>, ns: 'test.$cmd.listCollections', firstBatch: [ { name: <string>, type: 'timeseries', options: { expireAfterSeconds: <number>, timeseries: { ... } }, ... }, ... ] } }
행동
Time series 컬렉션은 일반 컬렉션처럼 작동합니다. 평소와 같이 데이터를 삽입하고 쿼리할 수 있습니다. MongoDB는 시계열 컬렉션을 삽입 시 시계열 데이터를 최적화된 저장 형식으로 자동으로 구성하는 내부 컬렉션에 대한 쓰기 가능한 비실체화 뷰로 취급합니다.
time-series 컬렉션을 쿼리 경우, 측정값당 하나의 문서에 대해 작업하게 됩니다. time series 컬렉션에 대한 쿼리는 최적화된 내부 저장 형식을 활용하고 결과를 더 빠르게 반환합니다.
Index
팁
쿼리 성능을 향상시키려면 metaField
및 timeField
로 지정된 필드에 보조 인덱스를 수동으로 추가할 수 있습니다.
Time series 컬렉션은 시간별로 데이터를 자동으로 정렬하고 인덱싱합니다. time series 컬렉션의 내부 인덱스는 listIndexes
로 표시되지 않습니다.
1970-01-01T00:00:00.000Z
이전 또는 2038-01-19T03:14:07.000Z
이후에 timeField
값이 있는 문서를 컬렉션에 삽입하면 MongoDB는 경고를 기록하고 일부 쿼리 최적화에서 내부 인덱스를 사용하지 못하도록 합니다. timeField
에 세컨더리 인덱스를 생성하여 쿼리 성능을 회복하고 로그 경고를 해결합니다.
기본 압축 알고리즘
시계열 컬렉션은 컬렉션이 생성될 때 storageEngine
옵션을 사용하여 다른 압축 알고리즘을 지정하지 않는 한 전역 기본 압축 알고리즘인 snappy 를 무시하고 zstd 를 사용합니다. 예를 들어 새 weather
컬렉션에 대해 압축 알고리즘을 snappy
로 변경하려면 다음 옵션을 추가합니다.
db.createCollection( "weather", { timeseries: { timeField: "timestamp" }, storageEngine: { wiredTiger: { configString: "block_compressor=snappy" } } } )
유효한 block_compressor
옵션은 다음과 같습니다.
snappy
zlib
zstd
(기본값)none