2012-10-28 6 views
28

Sono un super novizio di mongodb. Sto usando mangusta per accedere a mongodb da node.js, e so come far funzionare le cose, ma non credo di capire perché funzioni come fa.Perché la mangusta usa lo schema quando si suppone che il beneficio di mongodb sia che è senza schema?

Ancora più importante, non capisco perché la mangusta ha "schema" quando una delle caratteristiche di spicco di mongodb è che non ha schema. Qualcuno potrebbe illuminarmi? grazie.

+1

Penso che si tratti di uno schema predefinito, tuttavia è possibile aggiungere dinamicamente campi all'interno del codice dell'app senza dover modificare la tabella nel suo complesso. Un esempio è un'enorme tabella di prodotti, aggiungendo un campo in SQL che è brutto e lento, in MongoDB basta aggiungerlo al modello client ... – Sammaye

+0

MongoDB non è schema-less. Ha uno schema flessibile - c'è una grande differenza. –

+0

è una questione di gusti, Mongoose ti permette di avere uno schema tipizzato con convalide, se usi il driver non lo ottieni e dovrai farlo da solo. D'altra parte il livello di Mongoose influirà in qualche modo sulle prestazioni non elaborate in quanto richiede un po 'di manutenzione che richiede più tempo rispetto al driver raw. – christkv

risposta

22

I dati senza uno schema sono inutili. Ottieni un documento da MongoDB, cosa fai con esso? Leggi alcuni campi? Devi conoscere i nomi, i tipi e i significati di quei campi. Questo è uno schema.

Quando la gente dice che MongoDB "non ha schema", in realtà significa che non applica lo schema come fanno i database SQL. MongoDB spinge i problemi dello schema fino al tuo livello di applicazione, dove puoi gestirli in modo più flessibile. Ad esempio, per aggiungere un nuovo campo ai tuoi documenti, non devi fare un all-or-nothing ALTER sulla tua collezione, potenzialmente milioni di voci. Basta aggiungere quel campo allo schema ODM (Mongoose) e il gioco è fatto.

+4

non completamente vero. Esistono app in tempo reale che possono contare su campi creati al volo. L'aggiunta di un campo al modello Mongoose indica un nuovo processo di distribuzione. Esistono ODM che non richiedono una definizione di schema fissa, per esempio Mongorito. –

+0

Hai mai sentito parlare di campi personalizzati? Supponiamo che tu voglia che i tuoi clienti siano in grado di definire il proprio schema, qualcosa che vorrai memorizzare nella propria collezione senza dover disporre di un codice di cambio sviluppatore per ogni cliente. Questo è un caso d'uso perfetto per la progettazione di schemi. –

+0

@TimHardy Dici "definisci il loro schema", ma poi chiamalo "schemaless" - vedi una contraddizione lì? Non ho detto che "i dati senza uno schema statico sono inutili". –

Problemi correlati