データベースを操作する際の一般的なシナリオの1つは、時間に基づいて一部のテーブルを自動的に削除することです。たとえば、製品のバックグラウンドジョブを追跡するためのジョブテーブルがあり、最後の1時間だけジョブを保持したい場合があります。通常の実装方法は、定期的に実行され、テーブルをガベージコレクションするデーモンプロセスを作成することです。これが非常に一般的なプロセスであることを考えると、MongoDBのスタッフは、この機能をデータベースに組み込んでおり、MongoDBのデプロイメントで活用できます。これは「TTLインデックス」と呼ばれます。 TTLインデックスを2つの簡単な手順で使用する方法は次のとおりです。
-
ステップ1:日付フィールドを追加する
ドキュメントに日付フィールドを追加して、ドキュメントの経過時間を示します。 MongoDBはこのフィールドを使用して、ドキュメントの有効期限が切れており、削除する必要があるかどうかを判断します。ドキュメントをより長く保持したい場合は、このドキュメントを更新された日付で更新してください。以下の例では、ジョブコレクションに「creationTime」フィールドを追加しました。
db.jobs.insert( { "name" : testjob "creationTime": new Date('Oct 30, 2013: 11:00:00'), "type": 2, } )
-
ステップ2:TTLインデックスを追加する
このフィールドのコレクションにTTLインデックスを追加します。以下のこの例では、expireAfterSeconds値3600を使用します。これにより、1時間ごとにジョブが期限切れになります:
db.jobs.ensureIndex( { "creationTime": 1 }, { expireAfterSeconds: 3600 } )
TTLデーモンは60秒ごとに実行されるため、ドキュメントは有効期限が切れてから約60秒以内に削除されます。 TTLインデックスのもう1つの利点は、通常のインデックスと同じように動作することです。したがって、日付フィールドでクエリを実行すると、クエリプランでインデックスが使用されます。詳細については、TTLインデックスに関するMongoDBのドキュメントを参照してください。