What's the potential use for capped collections? (besides logging)
Le raccolte con cappuccio sono utili per i casi di utilizzo di nicchia nei quali:
- Vuoi limitare la quantità di dati conservati in un ordine FIFO (First In, First Out)
- Vuoi garantire che i dati siano memorizzati nell'ordine di inserzione
- Non hai aggiornamenti che fanno aumentare la dimensione dei documenti nelle dimensioni
- Non è necessario eliminare i documenti manualmente
- Potresti voler utilizzare un cursore tediabile per attivare alcune attività basate sugli inserimenti in una raccolta
Diverse di queste caratteristiche (ad esempio, che non consentono di aumentare la dimensione dei documenti) possono sembrare insolitamente restrittive, ma c'erano alcune motivazioni significative per il design originale: abilitare le percentuali di inserimento più elevate possibili per l'originale motore di archiviazione MMAP e assicurati che i documenti nelle raccolte con limite abbiano la stessa dimensione quando replicati. Il motore di archiviazione MMAP prealloca i file per l'intera raccolta limitata per ridurre al minimo la frammentazione dello spazio di archiviazione ed evitare preoccupazioni sull'esaurimento dello spazio su disco prima che una raccolta raggiunga la sua dimensione massima limitata.
MongoDB 3.0 ha aggiunto un'API del motore di archiviazione e in MongoDB 3.2 il motore di archiviazione predefinito per le nuove distribuzioni è stato modificato da MMAPv1 a WiredTiger . Tutti i motori di archiviazione attualmente supportano le collezioni con limite come parte dell'API MongoDB, ma l'interno e l'efficienza delle implementazioni varieranno rispetto al motore di archiviazione MMAP originale.
Poiché le collezioni con limite sono effettivamente grandi buffer circolari a dimensione fissa, i casi di utilizzo più ovvi riguardano la registrazione. In genere, una certa quantità di dati "recenti" deve essere conservata e invecchiata in un modo FIFO piuttosto che crescere indefinitamente.
MongoDB si affida alle collezioni con limite per un numero di casi d'uso interni come:
- Il
local.startup_log
, una collezione con limite di 10 MB che cattura alcuni elementi diagnostici / informazioni sull'ambiente relative all'istanza mongod
locale all'avvio.
- La replica oplog (log operazioni) , che ciascun membro del set di repliche utilizza per registrare un elenco idempotente di tutte le operazioni di scrittura applicate localmente. La dimensione oplog predefinita è basata su% dello spazio libero su disco, ma è generalmente dell'ordine di 50 GB.
- Il cluster semplificato
config.changelog
, che è una raccolta con limite di 10 MB di attività di bilanciamento dei cluster più recenti.
Potresti utilizzare le collezioni con limite per i casi in cui desideri che i dati invecchino automaticamente (ovvero una cache o una coda FIFO), ma una raccolta normale con un Indice Time-To-Live (TTL) generalmente offre molta più flessibilità e controllo sulla scadenza dei documenti.
Capped collections cannot be sharded, but they can be replicated. In case of network partition and after rejoin, how is capped collection synchronized/merged?
Sharding partiziona una raccolta su più server ed è contraria a molti degli obiettivi di design della collezione con limite sopra elencati. La replica è una copia asincrona (ma ordinata) delle operazioni di scrittura su tutti i membri di un set di repliche.
In un ambiente di set di repliche le scritture su raccolte limitate si propagano utilizzando lo stesso meccanismo di replica come tutte le altre scritture. I dati sui secondari saranno infine coerenti in base al ritardo di replica, ma conservano comunque l'ordine di inserzione e altre proprietà della collezione con limite massimo. I set di repliche consentono solo un singolo primario, quindi nel caso di una partizione di rete un primario verrà eletto solo per una partizione con la maggior parte dei nodi sani. Tutti i membri isolati sul lato di una partizione di minoranza rimarranno come secondari di sola lettura fino a quando non saranno in grado di ricongiungersi al set di repliche e tenteranno di riprendere la replica.