MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Documenti di raccolta MongoDB invecchiati automaticamente

Uno degli scenari comuni nell'utilizzo di un database consiste nel sfoltire automaticamente alcune tabelle in base al tempo. Ad esempio, potresti avere una tabella dei lavori per tenere traccia dei lavori in background nel tuo prodotto e desideri mantenere i lavori solo per l'ultima ora. Il modo in cui viene generalmente implementato è che finisci per scrivere un processo daemon che viene eseguito periodicamente e raccoglie i dati inutili delle tue tabelle. Dato che questo è un processo così comune, la gente di MongoDB ha integrato questa funzionalità nel database che può essere sfruttata nelle distribuzioni di MongoDB! Si chiama "Indici TTL". Ecco come puoi utilizzare gli indici TTL in due semplici passaggi:

  1. Passaggio 1:aggiungi un campo data

    Aggiungi un campo data al tuo documento per indicare l'età del documento. MongoDB utilizzerà questo campo per determinare se il documento è scaduto e deve essere rimosso. Se desideri conservare il documento più a lungo, aggiorna questo documento con una data aggiornata. Nell'esempio seguente ho aggiunto un campo "creationTime" alla mia raccolta di lavori:

    db.jobs.insert( {
       "name" : testjob
       "creationTime": new Date('Oct 30, 2013: 11:00:00'),
       "type": 2,
    } )
  2. Passaggio 2:aggiungi un indice TTL

    Aggiungi un indice TTL alla tua raccolta in questo campo. In questo esempio di seguito, utilizzeremo un valore requireAfterSeconds di 3600. Questo scadrà i lavori dopo ogni ora:

    db.jobs.ensureIndex( { "creationTime": 1 }, { expireAfterSeconds: 3600 } )

    Il demone TTL viene eseguito ogni 60 secondi, quindi il tuo documento verrà eliminato entro circa 60 secondi dalla scadenza. Un altro vantaggio degli indici TTL è che si comportano anche come normali indici, quindi puoi eseguire query sul campo della data e il piano di query utilizzerà l'indice. Per maggiori dettagli, fare riferimento alla documentazione di MongoDB sugli indici TTL.