2016-07-30 14 views
0

Ich habe ein Benutzerdokument, und es hat ein Array-Feld namens ActivityLog. Jede Aktion, die der Benutzer unternimmt, muss hier aufgezeichnet werden. Allerdings weiß ich MongoDB Caps Dokumentgrößen bei 16 MB. Wenn dieses Array möglicherweise Millionen von Elementen enthalten kann, überschreitet das nicht die maximale Dokumentengröße? Wie kann ich damit umgehen?Wie gehe ich mit großen Arrays in MongoDB um?

Bitte beantworten Sie dies in der Regel, das heißt einige allgemeine Array muss möglicherweise Millionen von Artikeln Fall

+0

* Wenn dieses Array potenziell Millionen von Elementen enthalten kann ... * WARUM? beabsichtigen Sie, Benutzeraktivität für die letzten zwei Jahre zu halten? macht das überhaupt Sinn? – Rahul

+0

Wenn ein Benutzer seinen Account löscht, müssen wir alle seine Aktionen rückgängig machen können, egal wo er einen Beitrag hat, usw. – Russell

Antwort

0

Von der Verwendung halten, die Sie beschrieben haben, sieht es aus wie Aktivitätsprotokolle zu einer getrennten Sammlung gehören. Wie Sie bereits erwähnt haben, können Sie keine Protokolle in einen Benutzer einbetten, da die Datenmenge stark anwächst und die Dokumentgröße von 16 MB überschreiten kann. Daher ist die Verwendung von Referenzen der richtige Weg. Als Nächstes müssen Sie entscheiden, ob Sie von einem Benutzer auf Protokolle oder von Protokollen auf einen Benutzer verweisen möchten (Elternreferenzierung). Ein Array von Verweisen auf Protokolle in einem Benutzer ist nicht so gut wie das Verweisen auf Eltern, da es immer noch die Grenzen der Dokumentgröße überschreiten kann. Außerdem benötigen Sie bei jedem Abruf eines Benutzers kaum den gesamten Benutzerverlauf.

Verwandte Themen