Domanda

Vari contatori di servizi mongodb in base all'utilizzo del disco.Quali sono alcuni suggerimenti per risparmiare spazio quando si lavora con mongodb?

Grazie.

È stato utile?

Soluzione

Questa domanda è davvero piuttosto vaga.Alcune cose che potrebbero applicarsi o meno al tuo caso (in nessun ordine particolare):

Accorciare i nomi dei campi dettagliati

Ciò è meglio illustrato con un esempio:

{
    surname: "Smith",
    forename: "John",
    location: { grid_e: 100.02, grid_n: 450.08 }
}

Il documento precedente potrebbe essere abbreviato rimuovendo inutili prolissità nei vari nomi di campo.

{
    sn: "Smith",
    fn: "John",
    loc: { e: 100.02, n: 450.08 }
}

Questo ti darà un piccolissimo risparmio di spazio, ma sarà moltiplicato per la dimensione di ciascun documento (numero di campi) e per il numero di documenti (potrebbe diventare significativo se ne hai milioni).Ecco un post superbo discutere i vantaggi e gli svantaggi di questo metodo.

Collezioni limitate

Le raccolte limitate ti consentono di specificare un limite al numero di documenti che desideri archiviare.Funziona in modalità first-in-first-out (i documenti più vecchi verranno scartati).Ciò è particolarmente applicabile se si sta effettuando la registrazione e si desidera archiviare la versione più recente x documenti, ma quelli vecchi non hanno alcuna rilevanza.

Esistono alcune avvertenze sull'uso delle raccolte limitate.Vedi il Documenti MongoDB per tutti i dettagli.

Considera le relazioni tra i tuoi documenti

I documenti possono avere documenti incorporati o relazioni con altri documenti (in altre raccolte) in stile chiave esterna.I pro e i contro di ciascun approccio sono discusso frequentemente, ma alla fine spetta a te scegliere quale approccio funziona per te.

Prendendo l'esempio di un blog, è possibile che ogni post del blog abbia un autore.Puoi incorporare le informazioni sull'autore in ciascun post oppure scegliere di inserirle in modo autonomo authors O users collezione.Quest’ultimo approccio farebbe risparmiare spazio, soprattutto se molti utenti spesso pubblicano molti post (anziché solo uno o due).Tieni presente che incorrerai in una chiamata aggiuntiva al database poiché non sono previste unioni.

Modificare:Espansione sulle relazioni

Le relazioni tra i documenti possono essere stabilite in un paio di modi oltre a incorporarli.Potresti semplicemente utilizzare l'ID del documento correlato in questo modo (riutilizzando l'esempio del blog sopra):

{
    _id: <whatever>,
    title: "Document Relationships in MongoDB",
    body: "bla bla bla bla",
    // ...
    user_id: <id of the user document>
}

E nel users raccolta, il documento correlato esisterebbe:

{
    _id: <whatever>,
    name: "Mark Embling",
    email: "example@markembling.info",
    ///...
}

Questo è probabilmente l'approccio più semplice possibile alle relazioni (oltre a incorporarle), ma spetterà a te mantenerlo all'interno del tuo codice interamente.Dovrai effettuare la chiamata per acquisire l'utente correlato quando ne hai bisogno e aggiornarlo ogni volta che potrebbe essere necessario.Detto questo, non vedo nulla di sbagliato in questo approccio e l’ho visto utilizzato in alcune occasioni.

Un approccio simile consiste nell'utilizzare DBRef.Questo è un metodo più formale per descrivere una relazione come quella sopra.Invece di inserire semplicemente l'ID dell'altro documento, si specifica un DBRef che è una sorta di riferimento ad un altro documento, formalizzato.Spero che abbia un senso.Entrambi gli approcci che ho descritto qui lo sono discusso in dettaglio nei documenti mongodb.Vale la pena notare che i riferimenti manuali occuperanno (leggermente) meno spazio di un DBRef, poiché un DBRef contiene informazioni extra (possibilmente ridondanti), come ad esempio a quale raccolta si fa riferimento.Ha però il vantaggio di essere supportato nativamente da molte librerie di driver, quindi ti semplifica la vita.

In definitiva, quali metodi funzionano e sono rilevanti dipendono da ciò che stai cercando di fare.Considera le opzioni, il compromesso e decidi se è qualcosa che dovresti fare.E sperimenta.

Altri suggerimenti

Cercate di evitare duplicazione di dati ed eventualmente utilizzare una qualche forma di compressione se la memorizzazione di grandi quantità di dati che non hanno bisogno di essere ricercabile.

penso buon modo è utilizzare un documento per i dati correlati

Per esempio, se si dispone di raccolta utente si può dare documento ad ogni utente e in questo documento implantari altre cose come avatar o ACL e altre cose

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top