時系列コレクション(TTL)の自動削除の設定
項目一覧
時系列コレクションを作成するときに、 expireAfterSeconds
パラメータを使用して、指定した秒数より古いドキュメントを自動的に削除するように設定できます。
db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "hours" }, expireAfterSeconds: 86400 } )
有効期限のしきい値は、timeField
フィールドの値に、指定された秒数を加えた値になります。weather24h
コレクション内の次のドキュメントを考えてみましょう。
{ "metadata": {"sensorId": 5578, "type": "temperature"}, "timestamp": ISODate("2021-05-18T10:00:00.000Z"), "temp": 12 }
このドキュメントは"2021-05-19T10:00:00.000Z"
に、データベースで期限切れになります。 バケット内のすべてのドキュメントの有効期限が切れると、期限切れのバケットを削除するバックグラウンドタスクが、次回の実行時にバケットを削除します。 詳細については、「 削除操作のタイミング」を参照してください。
コレクションの自動削除を有効にする
既存の時系列コレクションのドキュメントの自動削除を有効にするには、次の 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
フィールドを含む時系列コレクションのドキュメントが含まれます。
{ 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 は、有効期限が切れたデータが有効期限後すぐに削除されることを保証しません。バケット内のすべてのドキュメントの有効期限が切れると、期限切れのバケットを削除するバックグラウンド タスクが、次回の実行時にバケットを削除します。1 つのバケットがカバーすることを許可される時間の最大スパンは、時系列コレクションの granularity
によって制御されます。
granularity | カバーする時間 |
---|---|
"seconds" (デフォルト) | 1 時間 |
"minutes" | 24 時間 |
"hours" | 30 日間 |
期限切れのバケットを削除するバックグラウンド タスクは 60 秒ごとに実行されます。そのため、ドキュメントの有効期限が切れてから、バケット内の他のすべてのドキュメントの有効期限が切れ、タスクが実行中になるまでの間、ドキュメントがコレクションに残ることがあります。
削除操作の期間は mongod インスタンスのワークロードによって異なるため、バックグラウンド タスクの実行間隔が 60 秒を超えると、有効期限切れのデータがしばらく存在する可能性があります。