2016-01-05 1 views
6

Die MongoDB docs for DBREFs sagen:Warum empfehlen die MongoDB-Dokumente, keine DBREFs zu verwenden?

Sofern Sie einen zwingenden Grund haben DBRefs zu verwenden, anstatt manuell Referenzen verwenden.

Warum? DBREFs scheinen einfacher zu verwenden, da sie die Datenbank- und Auflistungsnamen kodieren, was zu weniger Festcodierung in der Anwendung führen würde. Außerdem ist DBREF a standard format that many drivers understand.

Diese Frage verwandt, aber nicht genau das gleiche:

MongoDB - is DBREF necessary?

Die Antwort auf diese Frage ist, dass die Einbettung/Normalisierungs zu verknüpfen vorzuziehen ist, aber es die Frage, warum Handbuch antwortet nicht Verknüpfung ist DBREFs vorzuziehen.

+2

Kurz gesagt, es ist, weil es für die meisten Situationen übertrieben ist, da Sie den gleichen Sammlungsnamen in jedem einzelnen DBRef speichern, der die Größe Ihrer Dokumente aufbläht. – JohnnyHK

+0

@JohnnyHK, das ist ein guter Punkt, aber möglicherweise nicht bei der Verwendung der WiredTiger Speicher-Engine https://www.mongodb.com/blog/post/new-compression-options-mongodb-30 –

Antwort

1

Hier ein Fazit von allem, was ich gesehen habe.

Mit DBRef ist keine join Operation, es wird automatisch die zweite oder mehrere Male abfragen, hängt davon ab, wie viel DBRef Sie in dieser Sammlung Felder haben.

Angenommen, Sie haben eine Sammlung, die ihr Modell 10 DBRef hat, machen Sie Abfrage für 10 Elemente Liste davon und eine dieser DBRef ist really needed. Sobald Sie abfragen, wird Mongodb 101(1 + 10*10) Abfragen automatisch ausgeführt, egal, ob Sie diese DBRef oder nicht benötigen. Wenn Sie dieses Feld manuell abfragen, werden nur einige wenige Coding- und nur 11(1 + 1*10) Abfragen benötigt.

Also, was sagst du?

+0

klingt plausibel, glücklich, richtig zu markieren solange ich verifizieren kann: Sie haben eine Quelle für diese Informationen oder ein Beispiel für die Überprüfung? –

+0

Nun, gerade getestet. Ich aktiviere das Profiling in mongodb und mache eine Abfrage für eine Klasse A, die mit 3 'DBRef'-Feldern der Klasse B arbeitet. Die Abfrage gibt 4 A zurück. Im Protokoll werden 1 Abfrage in Sammlung A und 12 Abfragen in Sammlung B angezeigt. Sie können es selbst testen, es ist schwierig, die Logging-Nachricht in den Kommentar einzufügen. – Kroderia

+0

Darüber hinaus zeigt es in der Protokollierung von "Spring-Boot-Starter-Daten-mongodb" nur eine Abfrage. – Kroderia