2011-09-09 16 views
6

Desidero codificare un'app Web in cui la maggior parte delle sezioni dipende dal profilo utente (ad esempio diversi elenchi di cose da fare per persona ecc.) E Mi piacerebbe usare MongoDB. Stavo pensando di creare circa 10 documenti embedabble per il documento del profilo principale e mantenere tutto ciò che riguarda un utente all'interno del proprio documento.Documenti incorporati MongoDB rispetto a ObjectIds univoci per un profilo utente di sistema

Non vedo un modo chiaro di usare chiavi esterne per mongodb, l'unico modo sarebbe di creare un campo to_do_id con il tipo di ObjectId per esempio, ma sarebbero completamente estranei internamente, solo che capita di avere il stessi ID che dovrei richiedere.

  1. Esiste un limite al numero di tipi di documento incorporato in un documento di livello superiore che potrebbe ridurre le prestazioni?
  2. Come risolvete il problema di avere un documento di profilo centrale a cui la maggior parte dei documenti deve fare riferimento nel presentare una vista per persona?
  3. Usi chiavi esterne semi in MongoDb e disponi di campi con tipi ObjectId che avrebbero l'ID univoco di altri documenti invece di incorporarli?

Non riesco a sentire quale approccio dovrebbe essere preso quando. Grazie mille!

+0

+1 per la buona domanda. – Adelin

risposta

2
  1. Non vi è alcun limite speciale in termini di prestazioni. Più grande è il documento, tuttavia, più tempo ci vuole per trasmettere sul filo. L'intero documento viene sempre recuperato.
  2. Lo faccio con riferimenti. È possibile scegliere tra semplici riferimenti manuali e il database DBRef come da questa pagina: http://www.mongodb.org/display/DOCS/Database+References
  3. Il collegamento sopra documenta come avere riferimenti in un documento in una chiave semi-estranea. Il DBRef potrebbe essere buono per quello che stai cercando di fare, ma il semplice riferimento manuale è molto efficiente.

Non sono sicuro che esista una regola generale per cui l'approccio di riferimento sia il migliore. Dal momento che utilizzo principalmente Java o Groovy, mi piace il fatto che ottenga un oggetto DBRef restituito. Posso verificare questo tipo di dati e usarlo per decidere come gestire il riferimento in modo generico.

Quindi tendo ad utilizzare un riferimento manuale semplice per i riferimenti a diversi documenti nella stessa raccolta e un DBRef per i riferimenti tra le raccolte.

Spero che questo aiuti.

+0

Quindi a quanto pare non ci sono regole stabilite, solo ciò che è più conveniente per il codice contro. Il punto sulla trasmissione di un documento di grandi dimensioni ha i suoi meriti, perché dovrei sempre dire all'app di selezionare solo i campi scelti se ci sono circa 10 documenti incorporati. Grazie. –

+0

Bene, ci sono alcune buone pratiche in merito alla progettazione dello schema, e alcune di queste si riferiscono all'uso di riferimenti. Vale la pena dare un'occhiata: http://www.mongodb.org/display/DOCS/Schema+Design – dlaidlaw

Problemi correlati