Tipps zum Platzsparen in mongodb

8

Verschiedene mongodb-Dienste Meter nach Datenträger verwenden. Was sind einige Tipps, um bei der Arbeit mit mongodb Platz zu sparen?

Danke.

    
Mark 26.11.2010, 15:44
quelle

3 Antworten

11

Diese Frage ist wirklich ziemlich vage. Einige Dinge, die für Sie gelten oder nicht (in keiner bestimmten Reihenfolge):

Verkürzen Sie ausführliche Feldnamen

Dies wird am besten anhand eines Beispiels veranschaulicht:

%Vor%

Das vorherige Dokument könnte verkürzt werden, indem unnötige Wortigkeit in den verschiedenen Feldnamen entfernt wird.

%Vor%

Dies wird Ihnen eine sehr kleine Speicherplatzeinsparung bringen, aber es wird mit der Größe jedes Dokuments (Anzahl der Felder) und der Anzahl der Dokumente multipliziert (könnte signifikant werden, wenn Sie Millionen haben). Hier ist ein hervorragender Beitrag , der die Vor- und Nachteile von diese Methode.

Begrenzte Sammlungen

Mit Capped-Sammlungen können Sie festlegen, wie viele Dokumente Sie speichern möchten. Es funktioniert nach dem First-In-First-Out-Verfahren (älteste Dokumente werden verworfen). Dies gilt insbesondere, wenn Sie sich anmelden und die neuesten x -Dokumente speichern möchten, aber alte Dokumente keine Relevanz haben.

Es gibt einige Einschränkungen für die Verwendung von gedeckelten Sammlungen. Detaillierte Informationen finden Sie in den MongoDB-Dokumenten .

Berücksichtigen Sie die Beziehungen Ihrer Dokumente

Dokumente können eingebettete Dokumente oder Beziehungen zu anderen Dokumenten (in anderen Sammlungen) im Stil eines Fremdschlüssels enthalten. Die Vor- und Nachteile der einzelnen Ansätze sind diskutiert häufig , aber letztendlich müssen Sie selbst entscheiden, welcher Ansatz für Sie funktioniert.

Am Beispiel eines Blogs kann es sein, dass jeder Blogbeitrag einen Autor hat. Sie könnten diese Autoreninformationen entweder in jeden Beitrag einbetten oder sie in ihre eigene Sammlung authors oder users einfügen. Der letztere Ansatz würde Platz sparen, insbesondere wenn viele Benutzer häufig viele Posts (statt nur ein oder zwei) schreiben. Beachten Sie, dass Sie einen zusätzlichen Datenbankaufruf erhalten, da keine Joins vorhanden sind.

Bearbeiten: Erweitern von Beziehungen

Beziehungen zwischen Dokumenten können auf verschiedene Arten zusätzlich zur Einbettung hergestellt werden. Sie könnten einfach die ID des zugehörigen Dokuments wie folgt verwenden (das obige Blog-Beispiel wiederverwenden):

%Vor%

Und in der users -Kollektion würde das entsprechende Dokument existieren:

%Vor%

Dies ist wahrscheinlich der einfachste mögliche Ansatz für Beziehungen (neben der Einbettung), aber es liegt an Ihnen, ihn innerhalb Ihres eigenen Codes vollständig zu verwalten. Sie müssen den Anruf tätigen, um den zugehörigen Benutzer bei Bedarf zu greifen und ihn bei Bedarf zu aktualisieren. Das heißt, ich sehe nichts falsch mit diesem Ansatz, und habe es bei einigen Gelegenheiten verwendet gesehen.

Ein ähnlicher Ansatz ist die Verwendung von DBRef. Dies ist eine formalere Methode zur Beschreibung einer Beziehung wie oben. Anstatt nur die ID des anderen Dokuments einzugeben, geben Sie einen DBRef an, der eine Art Verweis auf ein anderes formalisiertes Dokument darstellt. Ich hoffe das ergibt Sinn. Beide Ansätze, die ich hier beschrieben habe, sind ausführlich in den mongodb-Dokumenten beschrieben. Es ist erwähnenswert, dass manuelle Verweise (geringfügig) weniger Platz beanspruchen als ein DBRef, da ein DBRef zusätzliche (möglicherweise redundante) Informationen enthält, z. B. auf welche Sammlung Bezug genommen wird. Es hat den Vorteil, dass es nativ von vielen der Treiber-Bibliotheken unterstützt wird, so dass es Ihr Leben ein bisschen leichter macht.

Welche Methoden letztendlich funktionieren und relevant sind, hängt davon ab, was Sie versuchen zu tun. Betrachten Sie die Optionen, den Kompromiss und machen Sie den Anruf, ob es etwas ist, was Sie tun sollten. Und experimentiere.

    
Mark Embling 26.11.2010, 16:01
quelle
0

Vermeiden Sie die Duplizierung von Daten und möglicherweise eine Form der Komprimierung, wenn Sie große Datenmengen speichern, die nicht durchsucht werden müssen.

    
David Mårtensson 26.11.2010 16:04
quelle
0

Ich denke, ein guter Weg ist ein Dokument für verwandte Daten zu verwenden

Wenn Sie beispielsweise eine Benutzersammlung haben, können Sie jedem Benutzer ein Dokument geben und in diesem Dokument andere Dinge wie Avatar oder ACL und andere Dinge einpflanzen

    
Efazati 27.11.2010 05:07
quelle

Tags und Links