Time Series 컬렉션(TTL)에 대한 자동 제거 설정
time series 컬렉션을 만들 때 expireAfterSeconds
매개변수를 사용하여 지정된 시간(초)보다 오래된 문서를 자동으로 제거하도록 설정할 수 있습니다.
db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "hours" }, expireAfterSeconds: 86400 } )
만료 임계값은 timeField
필드 값에 지정된 시간(초)을 더한 값입니다. weather24h
collection에서 다음 문서를 고려합니다.
{ "metadata": {"sensorId": 5578, "type": "temperature"}, "timestamp": ISODate("2021-05-18T10:00:00.000Z"), "temp": 12 }
문서는 "2021-05-19T10:00:00.000Z"
에 데이터베이스에서 만료됩니다. 버킷의 모든 문서가 만료되면 만료된 버킷을 제거하는 백그라운드 작업이 다음 실행 중에 버킷을 제거합니다. 자세한 내용은 삭제 작업 타이밍을 참조하세요.
컬렉션에서 자동 제거 활성화
기존 time series 컬렉션의 문서를 자동으로 제거하려면 다음 collMod
명령을 실행하세요.
db.runCommand({ collMod: "weather24h", expireAfterSeconds: 604801 })
expireAfterSeconds
매개 변수 변경
expireAfterSeconds
매개변수 값을 변경하려면 다음 collMod
명령을 실행합니다.
db.runCommand({ collMod: "weather24h", expireAfterSeconds: 604801 })
현재 값 검색 expireAfterSeconds
expireAfterSeconds
의 현재 값을 검색하려면 listCollections
명령을 사용합니다.
db.runCommand( { listCollections: 1 } )
결과 문서에는 options.expireAfterSeconds
필드가 포함된 Time series 컬렉션에 대한 문서가 포함되어 있습니다.
{ cursor: { id: <number>, ns: 'test.$cmd.listCollections', firstBatch: [ { name: <string>, type: 'timeseries', options: { expireAfterSeconds: <number>, timeseries: { ... } }, ... }, ... ] } }
자동 제거 비활성화
자동 제거를 사용하지 않으려면 collMod
명령을 사용하여 expireAfterSeconds
을 off
로 설정합니다.
db.runCommand({ collMod: "weather24h", expireAfterSeconds: "off" })
행동
삭제 작업의 타이밍
MongoDB는 만료된 데이터가 만료 즉시 삭제된다는 것을 보장하지 않습니다. 버킷의 모든 문서가 만료되면 만료된 버킷을 제거하는 백그라운드 작업이 다음 실행 중에 버킷을 제거합니다. 단일 버킷이 처리할 수 있는 최대 시간은 time series 컬렉션의 granularity
기준으로 제어됩니다.
granularity | 적용 시간 범위 |
---|---|
"seconds" (기본값) | 1시간 |
"minutes" | 24시간 |
"hours" | 30일 |
만료된 버킷을 제거하는 백그라운드 작업은 60초마다 실행됩니다. 따라서 문서가 만료되고 버킷에 있는 다른 모든 문서가 만료되고 백그라운드 작업이 실행되기 전까지의 기간 동안 문서가 컬렉션에 남아 있을 수 있습니다.
제거 작업 기간은 mongod 인스턴스의 워크로드에 따라 달라지므로 만료된 데이터는 백그라운드 작업 실행 사이의 60초를 초과하는 기간 동안 존재할 수 있습니다.