2016-01-05 15 views
6

Il MongoDB docs for DBREFs dicono:Perché i documenti di MongoDB consigliano di non utilizzare DBREF?

Se non avete un motivo valido per usare DBRefs, utilizzare riferimenti manuali, invece.

Perché? I DBREF sembrano più facili da usare, dal momento che codificano i nomi di database e di raccolta, il che porterebbe a meno hard-coding nell'applicazione. Inoltre, DBREF è a standard format that many drivers understand.

Questa domanda è legata, ma non è esattamente lo stesso:

MongoDB - is DBREF necessary?

La risposta a questa domanda è che l'incorporamento/denormalizzazione è preferibile il collegamento, ma non risponde alla domanda del perché il manuale il collegamento è preferibile ai DBREF.

+2

In breve, è perché è eccessivo per la maggior parte delle situazioni quando si finisce per memorizzare lo stesso nome della raccolta in ogni singolo DBRef che fa gonfiare le dimensioni dei documenti. – JohnnyHK

+0

@JohnnyHK, questo è un buon punto, ma potrebbe non essere applicabile quando si utilizza il motore di archiviazione WiredTiger https://www.mongodb.com/blog/post/new-compression-options-mongodb-30 –

risposta

1

Ecco una conclusione di tutto ciò che ho visto.

Utilizzando DBRef non è un'operazione join, si interrogherà automaticamente il secondo o più volte, dipende da quanto DBRef avete ottenuto in questi campi di raccolta.

Supponendo di avere una collezione che il suo modello ha 10 DBRef, fate query per la lista di 10 elementi di esso e uno di questi è DBRefreally needed. Una volta eseguita la query, Mongodb eseguirà automaticamente le query 101(1 + 10*10), indipendentemente dal fatto che siano necessari questi DBRef oppure no. Se si interrogano manualmente questi campi, sono necessarie solo alcune codifiche e solo le query 11(1 + 1*10).

Quindi, cosa dici?

+0

suoni plausibili, felici di segnare correttamente finché riesco a verificare: hai una fonte per queste informazioni o un esempio di come verificare? –

+0

Bene, testato proprio ora. Abilito la profilatura in mongodb e faccio una query tutta per una classe A, che con 3 campi 'DBRef' di classe B. La query restituisce 4 A. Nel registro, mostra 1 query nella raccolta A e 12 query nella raccolta B. Puoi testarlo da solo, è difficile incollare il messaggio di registrazione nel commento. – Kroderia

+0

Inoltre, nella registrazione di 'spring-boot-starter-data-mongodb', mostra solo una query. – Kroderia