MongoDB - Collezioni limitate
Capped collectionssono raccolte circolari di dimensione fissa che seguono l'ordine di inserimento per supportare prestazioni elevate per le operazioni di creazione, lettura ed eliminazione. Con circolare, significa che quando la dimensione fissa assegnata alla raccolta è esaurita, inizierà a eliminare il documento più vecchio nella raccolta senza fornire alcun comando esplicito.
Le raccolte limitate limitano gli aggiornamenti ai documenti se l'aggiornamento determina un aumento delle dimensioni del documento. Poiché le raccolte con limite archiviano i documenti nell'ordine di archiviazione su disco, garantisce che la dimensione del documento non aumenti la dimensione allocata sul disco. Le raccolte con limite sono le migliori per archiviare le informazioni di registro, i dati della cache o qualsiasi altro dato ad alto volume.
Creazione di una collezione con limite
Per creare una raccolta con limite, usiamo il normale comando createCollection ma con capped opzione come true e specificando la dimensione massima della raccolta in byte.
>db.createCollection("cappedLogCollection",{capped:true,size:10000})
Oltre alla dimensione della raccolta, possiamo anche limitare il numero di documenti nella raccolta utilizzando l'estensione max parametro -
>db.createCollection("cappedLogCollection",{capped:true,size:10000,max:1000})
Se desideri verificare se una raccolta è limitata o meno, utilizza quanto segue isCapped comando -
>db.cappedLogCollection.isCapped()
Se è presente una raccolta esistente che intendi convertire in limitata, puoi farlo con il seguente codice:
>db.runCommand({"convertToCapped":"posts",size:10000})
Questo codice convertirà la nostra raccolta esistente posts a una raccolta limitata.
Interrogazione raccolta limitata
Per impostazione predefinita, una query di ricerca su una raccolta limitata mostrerà i risultati in ordine di inserzione. Ma se vuoi che i documenti vengano recuperati in ordine inverso, usa il filesort comando come mostrato nel codice seguente -
>db.cappedLogCollection.find().sort({$natural:-1})
Ci sono pochi altri punti importanti riguardanti le collezioni limitate che vale la pena conoscere:
Non possiamo eliminare documenti da una raccolta limitata.
Non sono presenti indici predefiniti in una raccolta con limite, nemmeno nel campo _id.
Durante l'inserimento di un nuovo documento, MongoDB non deve effettivamente cercare un posto per ospitare il nuovo documento sul disco. Può inserire alla cieca il nuovo documento in coda alla raccolta. Ciò rende molto veloci le operazioni di inserimento nelle raccolte con limite.
Allo stesso modo, durante la lettura dei documenti, MongoDB restituisce i documenti nello stesso ordine in cui sono presenti sul disco. Ciò rende l'operazione di lettura molto veloce.