2011-12-19 16 views
8

Sto leggendo su MongoDB e sto cercando di capire dove è meglio utilizzarlo. Una domanda a cui non vedo una risposta chiara è quali operazioni siano economiche o costose e in quali condizioni.Quali operazioni sono economiche/costose in mongodb?

Potete aiutare a chiarire?

Grazie.

risposta

4

Si sostiene spesso che mongodb ha scritture insanamente veloci. Anche se non sono davvero lenti, questa è piuttosto un'esagerazione. La velocità di scrittura in mongodb è limitata dal blocco di scrittura globale. Sì, mi hai sentito bene, ci può essere solo l'operazione di scrittura ONE sul server in qualsiasi momento.

Inoltre, ti suggerisco di sfruttare la natura di schemaless di mongodb e archiviare i tuoi dati denormalizzati. Spesso è possibile fare solo un disco cercare di recuperare tutti i dati richiesti (perché è tutto nello stesso documento). Meno ricerche su disco - query più veloci.

Se i dati sono nella RAM, non è richiesta alcuna ricerca del disco, i dati vengono inviati direttamente dalla memoria. Quindi, assicurati di avere abbastanza RAM.

Map/Reduce, group, $where le query sono lente.

Non è veloce mantenere la scrittura su un documento grande (utilizzando $push, ad esempio). Il documento supererà i limiti del disco e dovrà essere copiato in un altro posto, il che implica più operazioni sul disco.

E sono d'accordo con @AurelienB, alcuni principi di base sono universali in tutti i database.

+0

Quello che ho sentito dire è "mongodb ha scritture individuali molto veloci, ma il sistema di blocco ti limita a uno alla volta." Questo si applica anche con sharding? – Abe

+0

No, sharding mitiga questo problema. Ogni frammento ha il suo lucchetto. –

1

Questo non è molto diverso da tutti i sistemi di database.

Le query sui dati indicizzati sono veloci. Query su molti dati sono ... lenti. A causa della denormalizzazione, se non ci sono indici, la scrittura sulla base sarà veloce, ecco perché il log è il caso d'uso di base.

Al contrario, la lettura dei dati che si trovano su disco (non in RAM) senza indice può essere molto lenta quando si dispone di un miliardo di documenti.

3

Dalla mia pratica una cosa che dovrebbe menzionato è che MongoDB non è molto buona misura per il reporting, perché al solito nei rapporti necessari dati provenienti da diverse collezioni ('join') e MongoDB non fornisce un buon modo per aggregare più dati collezioni (e non dovrebbero fornire). Sicuramente per alcuni report mappa/riduci o incremental map/reduce può funzionare bene, ma si tratta di situazioni rare.

Per i rapporti alcune persone suggeriscono di migrare i dati nei database delle relazioni, che hanno molti strumenti per la segnalazione.

Problemi correlati