Collections plafonnées, index TTL et curseurs#
Collections plafonnées#
Collections à taille fixe#
- Taille déterminée à la création
- Suppression des documents les plus anciens lorsque la taille maximale est atteinte
Rotation automatique des documents#
- Pas besoin de gérer manuellement la suppression des documents
- Idéal pour les données temporaires et les flux de données en temps réel
Création avec db.createCollection()#
- Commande shell : db.createCollection("logs", {capped: true, size: 1000000, max: 1000})
- Configuration : {capped: true, size:
, max: } - size : taille maximale de la collection en octets
- max : nombre maximal de documents (optionnel)
Utilisations courantes : logs, cache, flux de données en temps réel#
Exemple de code pour insérer un log :
db.logs.insertOne({ timestamp: new Date(), message: "Nouveau log", level: "info" });
Exemple de code pour récupérer les logs récents :
var logs = db.logs.find().sort({ timestamp: -1 }).limit(10);
logs.forEach(log => printjson(log));
Index TTL (Time-To-Live)#
Suppression automatique des documents après un délai spécifié#
Adapté aux données temporaires#
- Exemples : sessions utilisateur, logs, données expirables
- Applications : surveillance, analyse des logs, traitement de flux de données
Création d'un index TTL#
- Utiliser la commande db.collection.createIndex()
- Spécifier le champ de date ou Timestamp et le délai d'expiration en secondes
Exemple :
db.sessions.createIndex({ "createdAt": 1 }, { expireAfterSeconds: 3600 })
Définir le champ de date ou Timestamp lors de l'insertion du document#
Exemple d'insertion de document avec un champ "createdAt" :
db.sessions.insert({ "user": "jdoe", "createdAt": new Date() })
Fonctionnement des index TTL#
- Le processus MongoDB supprime périodiquement les documents expirés
- Les documents sont supprimés en fonction de leur champ de date ou Timestamp
- Le délai d'expiration peut être modifié en utilisant collMod
Exemple pour modifier le délai d'expiration à 7200 secondes :
db.runCommand({ collMod: "sessions", index: { keyPattern: { createdAt: 1 }, expireAfterSeconds: 7200 }})
Limitations des index TTL#
- Ne fonctionne pas sur les collections plafonnées
- Ne supprime pas les documents si le champ de date ou Timestamp est manquant ou non valide
- Les suppressions ne sont pas instantanées, mais effectuées lors des vérifications périodiques par MongoDB
Utilisation des curseurs Tailable#
Objectifs#
- Curseurs persistants pour les collections plafonnées
- Suivre les insertions en temps réel
- Similaire à la fonctionnalité tail -f sous Unix
Création d'une collection plafonnée#
- Commande : db.createCollection("logs", { capped: true, size: 1000000, max: 1000 })
Utilisation avec cursor.addOption(DBQuery.Option.tailable)#
- Exemple :
var cursor = db.logs.find().sort({ $natural: -1 }).limit(1);
cursor.addOption(DBQuery.Option.tailable);
cursor.addOption(DBQuery.Option.awaitData);
while (cursor.hasNext()) {
printjson(cursor.next());
}
Commande alternative :
db.logs.find().addOption(DBQuery.Option.tailable).addOption(DBQuery.Option.awaitData);