Expiration automatique des données avec expireAfterSeconds
Les apprenants configureront l’option expireAfterSeconds sur une collection de séries temporelles afin de supprimer automatiquement les anciennes mesures et de maîtriser les coûts de stockage.
Expiration automatique des données avec expireAfterSeconds est une leçon MongoDB Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage MongoDB Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours MongoDB Academy comprend 4 leçons au total.
Pourquoi l'expiration automatique des données est importante
La valeur des données de séries temporelles est presque toujours limitée dans le temps : les mesures d'un capteur datant de 5 ans éclairent rarement les décisions actuelles. Conserver des données obsolètes gaspille de l'espace de stockage, ralentit les sauvegardes et augmente la taille des index. L'option expireAfterSeconds de MongoDB vous permet de déclarer une durée de conservation lors de la création de la collection afin que la base de données gère automatiquement le nettoyage, sans tâches cron ni routines de suppression au niveau de l'application.
Définir expireAfterSeconds lors de la création
Transmettez expireAfterSeconds comme option de premier niveau, au même niveau que l'objet timeseries, lors de l'appel à db.createCollection(). Cette valeur est un entier représentant le nombre de secondes pendant lesquelles conserver les données. Les documents dont la valeur de timeField est antérieure à maintenant − expireAfterSeconds peuvent être supprimés par le processus d'arrière-plan TTL.
// Create a collection that retains data for 30 days
db.createCollection('sensorReadings', {
timeseries: {
timeField: 'timestamp',
metaField: 'sensorId',
granularity: 'seconds'
},
expireAfterSeconds: 60 * 60 * 24 * 30 // 2592000 seconds = 30 days
})Fonctionnement de la suppression TTL pour les séries temporelles
Le processus TTL de MongoDB s'exécute environ toutes les 60 secondes. Pour les collections de séries temporelles, il supprime des documents de compartiment entiers plutôt que des mesures individuelles. Un compartiment n'est supprimé que lorsque toutes les mesures qu'il contient sont antérieures au seuil d'expiration. La suppression TTL est ainsi très efficace : la suppression d'un document de compartiment élimine des centaines de mesures en une seule opération.
Modifier expireAfterSeconds sur des collections existantes
Vous pouvez modifier à tout moment la durée de conservation d'une collection de séries temporelles existante à l'aide de la commande collMod, sans interruption de service. Augmenter cette valeur permet de conserver les données plus longtemps ; la réduire rend supprimables les données qui n'expiraient pas auparavant lors de la prochaine exécution de TTL. La modification prend effet dans un délai d'environ 60 secondes.
// Extend retention from 30 days to 90 days
db.runCommand({
collMod: 'sensorReadings',
expireAfterSeconds: 60 * 60 * 24 * 90 // 7776000 seconds
})
// Disable expiration entirely
db.runCommand({
collMod: 'sensorReadings',
expireAfterSeconds: 0
})TTL des collections classiques et index TTL
Les collections MongoDB classiques utilisent un index TTL (un index spécial à champ unique sur un champ de date doté d'un attribut expireAfterSeconds) pour faire expirer les documents individuellement. Les collections de séries temporelles utilisent un autre mécanisme : elles font expirer des documents de compartiment entiers plutôt que des documents de mesure individuels. Vous ne pouvez donc pas créer d'index TTL distinct sur une collection de séries temporelles ; l'expiration est gérée uniquement par l'option expireAfterSeconds au niveau de la collection.
// Regular collection TTL index (NOT for time series)
db.logs.createIndex(
{ createdAt: 1 },
{ expireAfterSeconds: 86400 } // deletes individual documents after 24h
)
// Time series uses collection-level option, not an index
// (The line below would fail on a time series collection)
// db.sensorReadings.createIndex({ timestamp: 1 }, { expireAfterSeconds: 86400 })Vérifier le paramètre d'expiration
Examinez la politique de conservation actuelle en exécutant db.getCollectionInfos() et en inspectant le champ options.expireAfterSeconds. Vous pouvez également vérifier db.sensorReadings.stats(), qui indique la configuration TTL dans son résultat. Cela est utile lors des audits pour confirmer que les collections de production utilisent la durée de conservation correcte.
// Check collection metadata including TTL
const info = db.getCollectionInfos({ name: 'sensorReadings' })
printjson(info[0].options)
// Output includes: { expireAfterSeconds: 2592000, timeseries: {...} }
// Check via stats
db.sensorReadings.stats()Conservation par niveaux avec plusieurs collections
Un modèle courant en production est la conservation par niveaux : les données brutes à haute fréquence sont stockées dans une collection de séries temporelles avec un TTL court (par exemple, 7 jours), tandis qu'une tâche d'agrégation s'exécute chaque nuit pour calculer des résumés horaires et les écrit dans une seconde collection avec un TTL plus long (par exemple, 2 ans). Cela permet d'équilibrer les coûts de stockage et le besoin d'analyser les tendances historiques.
// Raw readings — 7-day retention
db.createCollection('rawReadings', {
timeseries: { timeField: 'ts', metaField: 'deviceId', granularity: 'seconds' },
expireAfterSeconds: 60 * 60 * 24 * 7
})
// Hourly summaries — 2-year retention
db.createCollection('hourlyStats', {
timeseries: { timeField: 'hour', metaField: 'deviceId', granularity: 'hours' },
expireAfterSeconds: 60 * 60 * 24 * 730
})Calendrier et précision du processus TTL
Le processus d'arrière-plan TTL se réveille toutes les 60 secondes ; l'expiration n'est donc pas instantanée et les données peuvent subsister jusqu'à 60 secondes après avoir dépassé leur seuil. Sur les clusters Atlas fortement sollicités, les suppressions TTL peuvent être encore retardées. Pour les exigences de conformité imposant une suppression exacte à une seconde donnée, des scripts de suppression manuelle ou des déclencheurs Atlas planifiés offrent un contrôle plus prévisible que TTL.
Suppression manuelle pour un nettoyage immédiat
Si vous devez supprimer immédiatement un ensemble de mesures, par exemple pour purger les données d'un capteur défectueux, utilisez deleteMany() avec un filtre sur timeField et metaField. Les collections de séries temporelles prennent en charge les suppressions par plage temporelle et par valeur de metaField depuis MongoDB 5.1. Les filtres complexes sur les champs de mesure lors des suppressions sont pris en charge depuis MongoDB 6.0.
// Delete all readings from a broken sensor before a cutoff date
db.sensorReadings.deleteMany({
sensorId: 'sensor-broken-99',
timestamp: { $lt: new Date('2024-06-01T00:00:00Z') }
})
// Delete readings older than a specific date for all sensors
db.sensorReadings.deleteMany({
timestamp: { $lt: new Date('2023-01-01T00:00:00Z') }
})Surveiller la suppression des données expirées
MongoDB expose les métriques de suppression TTL dans l'état du serveur, dans la section metrics.ttl. Le compteur deletedDocuments indique le nombre de documents (des documents de compartiment pour les séries temporelles) supprimés par le processus TTL depuis le démarrage du processus mongod. La surveillance de ce compteur vous aide à confirmer que TTL s'exécute bien et supprime les données comme prévu en production.
// Check TTL deletion metrics in mongosh
const status = db.serverStatus()
printjson(status.metrics.ttl)
// Output:
// {
// deletedDocuments: NumberLong(12345),
// passes: NumberLong(500)
// }Bonnes pratiques pour planifier la conservation
Lors de la planification de la conservation, prenez en compte trois facteurs : les exigences de conformité (certaines réglementations imposent de conserver les données pendant plusieurs années), les besoins analytiques (jusqu'à quelle date vos requêtes remontent-elles ?) et le budget de stockage (combien coûte la conservation de N jours de données ?). Modélisez la croissance du stockage en estimant le volume quotidien de documents × la taille moyenne d'un document, puis définissez expireAfterSeconds pour équilibrer ces trois contraintes.
// Storage estimation helper
const docsPerDay = 60 * 60 * 24 // one reading per second = 86400
const avgDocBytes = 150 // approximate compressed document size
const retentionDays = 30
const totalBytes = docsPerDay * avgDocBytes * retentionDays
console.log('Estimated storage:', (totalBytes / 1e9).toFixed(2), 'GB')
// Outputs: Estimated storage: 0.37 GB for one sensor, 30 daysVérification rapide
Testez votre compréhension des concepts de MongoDB et des bases de données NoSQL présentés dans cette leçon.
Récapitulatif de la leçon
Dans cette leçon, vous avez appris que expireAfterSeconds se définit au niveau de la collection (et non via un index) et contrôle le moment où les compartiments entiers sont purgés, que collMod permet de modifier la durée de conservation d'une collection active sans interruption de service, et que la conservation par niveaux — TTL court pour les données brutes, TTL long pour les résumés préagrégés — constitue la bonne pratique en production pour stocker des séries temporelles à moindre coût. Nous allons maintenant aborder les mécanismes d'authentification dans MongoDB.
Apprends JavaScript avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 30
- Leçons
- 120
Questions Fréquemment Posées
La leçon « Expiration automatique des données avec expireAfterSeconds » est-elle gratuite ?
Oui — le texte complet de « Expiration automatique des données avec expireAfterSeconds » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours MongoDB Academy, passe à CoddyKit PRO. Le cours MongoDB Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Expiration automatique des données avec expireAfterSeconds » ?
Les apprenants configureront l’option expireAfterSeconds sur une collection de séries temporelles afin de supprimer automatiquement les anciennes mesures et de maîtriser les coûts de stockage. Tu pratiques MongoDB Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer MongoDB Academy ?
Aucune expérience préalable n'est requise. MongoDB Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Expiration automatique des données avec expireAfterSeconds » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon MongoDB Academy ?
Oui. Chaque leçon MongoDB Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Créer une collection de séries temporelles
- Insérer et interroger des données de séries temporelles
- Agrégations par fenêtre sur des séries temporelles
- Expiration automatique des données avec expireAfterSeconds