2010-12-09 5 views
0

Ich baue eine Web-App für Bookmark-Speicher mit einem Verzeichnissystem. Ich habe schon diese Sammlungen ein:Grundlegende Datenbank (MongoDB) Leistungsfrage

  • Pfad (e)
    ---> Verzeichnisse (eingebettete Dokumente)
    ---> Links (eingebettete Dokumente)

  • Benutzer (en)

So Leistung klug, sollte ich:
- fügen Sie den Benutzer-ID zu dem erstellten Pfad
- betten die ganze Pfade Sammlung in den spezifischen Benutzer

Ich möchte Option 2 holen, aber ja, ich weiß nicht ...

EDIT:
ich auch darum, die ganze Schnittstelle ajaxified dachte. Das heißt, ich lade die Verzeichnisse und Links von einem bestimmten Pfad (vom angemeldeten Benutzer) über Ajax. Auf diese Weise ist es schneller und ich muss die Benutzersammlung nicht berühren. Vielleicht ändert das die Dinge?

Wie ich in den Kommentaren gesagt habe, scheint 1 riesige Sammlung in der ganzen Datenbank irgendwie seltsam. Recht?

Antwort

1

Nun der Hauptzweck der MongoDB ist redundante Daten zu unterstützen.Ich empfehle Sekunde Option ist besser, weil in Ihrem Szenario, was ich fühle, dass, wenn Sie Pfadsammlung in den spezifischen Benutzer einbetten dann nur mit einer einzigen Abfrage Sie kann alle Daten über Benutzer sowie bezüglich der Pfadsammlung als auch erhalten.

Und wenn Sie die erste Option folgen, dann müssen Sie zwei getrennte Abfragen auslösen, um alle Daten zu erhalten, die Ihre Arbeit etwas erhöhen werden.

Da mongodb Daten in den Arbeitsspeicher bringt, können Sie Daten aus einer Sammlung in den Cursor speichern, und aus diesen Cursordaten können Sie Daten aus einer anderen Sammlung abrufen. Wenn wir also die Leistung sehen, denke ich nicht, dass das viele Auswirkungen haben wird.

+0

Danke für Ihre Antwort. Scheint irgendwie seltsam, nur eine riesige Sammlung in der Datenbank zu haben. Ist es nicht? Oh, und da ist noch etwas ... Ich werde die Frage bearbeiten ... – Icid

+1

@Icid Logischerweise kann Ihre Datenbank auf jede Größe wachsen, abhängig von Ihrer Speichergröße. Machen Sie sich also keine Sorgen darüber und auf riesigen Sammlungen, wenn Sie Indizierung durchführen, dann werden Sie Ergebnisse schneller erhalten.Wenn Sie die Indizierung durchführen möchten, dann verwenden Sie solr wie Zeug, weil mongodb auch Indizierung bietet, aber das wird die Betriebslast auf Ihrer db plötzlich erhöhen. Wenn Sie noch Zweifel in der zweiten Annäherung haben, dann können Sie mit der ersten Annäherung gehen und zweite Frage auf dem Cursor machen, der früher von mir erklärt wurde. – Rupeshit

1

RE: die Bearbeitung. Wenn Sie alles in einem Dokument speichern und eingebettete Dokumente verwenden möchten, stellen Sie bei der Ausführung Ihrer Abfragen sicher, dass Sie nur die Daten auswählen, die Sie benötigen. Andernfalls laden Sie das gesamte Dokument einschließlich der eingebetteten Dokumente.

+0

Gefällt mir? current_user.paths.where (: location => '/ directory') .first – Icid

+0

Hängt von deinem OM ab, mit Mongoid z.B. current_user.paths.where (: Standort => '/ Verzeichnis') .only (: ID,: Name) – MatthewFord