시계열 데이터의 세분성 설정
Time Series 컬렉션을 생성하면 MongoDB는 자동으로 system.buckets
시스템 컬렉션을 생성하고 수신 Time Series 데이터를 버킷으로 그룹화합니다. 세분성을 설정하면 데이터 수집 속도에 따라 데이터가 버킷되는 빈도를 제어할 수 있습니다.
MongoDB 6.3부터 사용자 지정 버킷 매개변수 bucketMaxSpanSeconds
및 bucketRoundingSeconds
를 사용하여 버킷 경계를 지정하고 Time Series 데이터의 버킷 방식을 보다 정확하게 제어할 수 있습니다.
참고
컬렉션이 생성된 후 Time Series 컬렉션의 세분성을 변경하려면 MongoDB 5.0.1 이상을 실행해야 합니다. MongoDB 5.0 알려진 문제를 참조하세요.
현재 버킷팅 매개변수 조회
현재 컬렉션 값을 조회하려면 listCollections
명령을 사용합니다.
db.runCommand( { listCollections: 1 } )
Time Series 컬렉션의 경우 출력에는 granularity
, bucketMaxSpanSeconds
및 bucketRoundingSeconds
매개변수(있는 경우)가 포함됩니다.
{ cursor: { id: <number>, ns: 'test.$cmd.listCollections', firstBatch: [ { name: <string>, type: 'timeseries', options: { expireAfterSeconds: <number>, timeseries: { timeField: <string>, metaField: <string>, granularity: <string>, bucketMaxSpanSeconds: <number>, bucketRoundingSeconds: <number> } }, ... }, ... ] } }
"세분성" 매개변수 사용
다음 표는 지정된 granularity
값을 사용할 때 하나의 데이터 버킷에 포함되는 최대 시간 간격을 보여줍니다.
granularity | granularity 버킷 한도 |
---|---|
seconds | 1시간 |
minutes | 24시간 |
hours | 30일 |
기본적으로 granularity
는 seconds
로 설정됩니다. granularity
값을 동일한 데이터 소스에서 들어오는 측정값 사이의 시간 간격과 가장 가까운 값으로 설정하여 성능을 개선할 수 있습니다. 예를 들어, 수천 개의 센서에서 날씨 데이터를 기록하지만 각 센서의 데이터를 5분에 한 번만 기록하는 경우 granularity
를 "minutes"
로 설정합니다.
db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "minutes" }, expireAfterSeconds: 86400 } )
granularity
를 hours
로 설정하면 최대 한 달 분량의 데이터 수집 이벤트가 단일 버킷으로 그룹화되어 탐색 시간이 길어지고 쿼리 속도가 느려집니다. seconds
로 설정하면 폴링 간격당 버킷이 여러 개 생성되며, 이 중 상당수는 단일 문서만 포함할 수 있습니다.
사용자 지정 버킷팅 매개변수 사용
MongoDB 6.3 이상에서는 granularity
대신 두 개의 사용자 지정 버킷 매개변수를 사용하여 버킷 경계를 수동으로 설정할 수 있습니다. '자정부터 4시간마다'와 같이 고정된 시간 간격에 대해 데이터를 쿼리하려는 경우 이 방법을 고려합니다. 해당 기간 사이에 버킷이 겹치지 않도록 하면 높은 쿼리 볼륨과 insert
작업에 최적화됩니다.
사용자 지정 버킷 매개 변수를 사용하려면 두 매개 변수를 모두 같은 값으로 설정하고 granularity
를 설정하지 마세요.
bucketMaxSpanSeconds
같은 버킷에 있는 타임스탬프 사이의 최대 시간을 설정합니다. 가능한 값은 1-31536000입니다.bucketRoundingSeconds
새 버킷의 시작 타임스탬프를 결정하는 시간 간격을 설정합니다. 문서에 새 버킷이 필요한 경우 MongoDB는 문서의 타임스탬프 값을 이 간격으로 내림하여 버킷의 최소 시간을 설정합니다.
기상 관측소 예시에서 4시간마다 요약 보고서를 생성하는 경우 "minutes"
의 granularity
를 사용하는 대신 사용자 지정 버킷팅 매개변수를 14,400초로 설정하여 버킷팅을 조정할 수 있습니다.
db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "metadata", bucketMaxSpanSeconds: 14400, bucketRoundingSeconds: 14400 } } )
시간이 2023-03-27T16:24:35Z
인 문서가 기존 버킷에 맞지 않는 경우, MongoDB는 최소 시간이 2023-03-27T16:00:00Z
이고 최대 시간이 2023-03-27T19:59:59Z
인 새 버킷을 생성합니다.
Time Series 세분성 변경
collMod
명령을 사용하여 더 짧은 시간 단위에서 더 긴 시간 단위로 timeseries.granularity
를 늘릴 수 있습니다.
db.runCommand( { collMod: "weather24h", timeseries: { granularity: "seconds" | "minutes" | "hours" } } )
granularity
대신 사용자 지정 버킷팅 매개변수 bucketRoundingSeconds
및 bucketMaxSpanSeconds
를 사용하는 경우 collMod
명령에 두 사용자 지정 매개변수를 모두 포함하고 동일한 값으로 설정합니다.
db.runCommand( { collMod: "weather24h", timeseries: { bucketRoundingSeconds: 86400, bucketMaxSpanSeconds: 86400 } } )
세분화 간격이나 사용자 지정 버킷팅 값은 줄일 수 없습니다.
참고
샤드 time series 컬렉션의 세분성을 수정하려면 MongoDB 6.0 이상을 실행해야 합니다.