MongoDB Leistung mit wachsender Datenstruktur

8

Nehmen wir an, wir entwickeln ein neues System und haben uns entschieden, MongoDB als primäre Datenbank zu verwenden. Das Datenschema ist einem Blog mit [wachsenden] Kommentaren sehr ähnlich.

In dem Buch "MongoDB Developers", Tipp # 6: Binden Sie keine Felder mit ungebundenem Wachstum ein, da es ineffizient ist, ständig Daten an das Ende eines Arrays anzuhängen (aber es deutete auch an, dass Kommentare ein "seltsames" sind Randfall ").

Nehmen wir an, unser neues System ist wie diese "Kommentare" in einem Blog - es wird ständig dynamisch, aber manchmal auch geändert oder gelöscht.

Wenn Sie also erkannt haben, dass es bei der Verwendung von MongoDB ein Leistungsproblem geben könnte, welche andere alternative Datenbank (muss eine horizontal skalierbare Datenbank sein) könnte diesem Zweck dienen? (Es macht uns nichts aus, MongoDB als unsere primäre Datenbank zu verwenden, aber die "Kommentare" zu einer alternativen Datenbank zu trennen. Welche Möglichkeiten gibt es?

Anmerkungen:

Die Redis-Funktion, Hashes als Datentypen zu verwenden, passt in die Beschreibung unserer "Kommentar" -Datenstruktur - ständig wachsend, aber manchmal modifiziert oder gelöscht - ABER wir brauchen keine reine In-Memory-Datenbank (wir wollen nicht Widmen Sie so viel RAM, wenn die Daten auf der Festplatte persistiert werden können - sonst wäre das für unser Problem gut geeignet.

Wie wäre es mit CouchDB? Wir sind nicht über dieses Produkt untersucht. Wie funktioniert es mit einer wachsenden Datenstruktur?

    
ikevin8me 16.02.2012, 06:53
quelle

4 Antworten

5

Um zu dem hinzuzufügen, was Thilo oben gesagt hat, ist der Grund, "Felder mit ungebundenem Wachstum nicht einzubetten", dass diese Art der Dokumentgrößenerweiterung dazu führen kann, dass MongoDB das Dokument verschieben muss, wenn es den ihm zugewiesenen aktuellen Platz überschreitet. Sie können mehr darüber im Abschnitt Füllfaktor der Dokumentation lesen.

Diese Arten von Bewegungen sind relativ teuer, besonders wenn sie häufig vorkommen. Daher begrenzen Sie die Größe (die im Wesentlichen das Wachstum begrenzt) der Kommentare in Ihrer Hauptsammlung (aktuellstes X usw.) und vielleicht sogar das Vorfüllen dieses Dokumentenfeldes (im Wesentlichen manuelles Auffüllen), um die Bewegungen zu reduzieren, die durch das Hinzufügen / Ändern von Kommentaren verursacht werden es lohnt sich für dich.

    
Adam Comerford 16.02.2012, 11:26
quelle
6

Sie könnten bei MongoDB bleiben, aber nicht alle Kommentare in das Hauptdokument einbetten, sondern nur die neuesten (begrenzt durch die Anzahl) und den Rest in einer separaten Sammlung behalten.

    
Thilo 16.02.2012 06:58
quelle
0

Mongo hört sich an, als würde es für euch gut funktionieren, behaltet die "Kommentare" einfach in einer separaten Sammelanzeige gegenüber einem Unterelement eines anderen Dokuments, d. h. einer Seite (Fortsetzung des Blog-Beispiels).

Was die Leistung von Mongo anbelangt, so sollten diese in Ordnung sein, solange diese Indizes in Ram passen.

    
Riyad Kalla 16.02.2012 07:02
quelle
0

Ihr Hauptproblem besteht darin, dass Sie dann wahrscheinlich Daten auf verschiedenen Speicherseiten aktualisieren und löschen, was bedeutet, dass Sie nicht in der Lage sind, die Daten nacheinander zu aktualisieren. In diesem Fall haben viele Datenbanken das gleiche Problem, sodass ein Wechsel von MongoDB nichts löst.

    
EhevuTov 16.02.2012 07:08
quelle

Tags und Links