Es wird empfohlen, wenn es für den Anwendungsfall machbar ist, was normalerweise nicht der Fall ist. Zeitreihendaten sind eine bemerkenswerte Ausnahme. Es trifft nicht wirklich auf $addToSet
zu und $push
weil sie dazu neigen, die Größe des Dokuments zu erhöhen, indem sie ein Array vergrößern.
Halt. Sind Sie sicher, dass Sie ständig wachsende Arrays mit Zehntausenden von Einträgen wollen? Wollen Sie bestimmte Einträge zurückfragen? Werden Sie Felder in den Array-Einträgen indizieren? Wahrscheinlich möchten Sie Ihre Dokumentenstruktur überdenken. Vielleicht möchten Sie alle data
Eintrag als separates Dokument mit Feldern wie market
, type
, createdAt
jeweils repliziert? Sie müssten sich keine Gedanken über Dokumentverschiebungen machen.
Warum wird das Array auf 75.000 Einträge anwachsen? Können Sie weniger Einträge pro Dokument machen? Sind das Zeitreihendaten ? Es ist großartig, mit der mmap-Speicher-Engine Dokumente vorab zuordnen und In-Place-Updates durchführen zu können, aber es ist nicht für jeden Anwendungsfall machbar und keine Voraussetzung für eine gute Leistung von MongoDB.
Nein, das ist nicht wirklich hilfreich. Die Dokumentgröße wird basierend auf der BSON-Größe der Nullwerte im Array berechnet, also wenn Sie null
ersetzen bei einem anderen Typ nimmt die Größe zu und Sie erhalten trotzdem Dokumentumschreibungen. Sie müssten das Array mit Objekten vorbelegen, wobei alle Felder auf einen Standardwert für seinen Typ gesetzt sind, z. B.
{
"date" : ISODate("1970-01-01T00:00:00Z") // use a date type instead of a string date
"price" : 0,
"amount" : 0,
"tid" : "000000", // assuming 7 character code - strings icky for default preallocation
"type" : "none" // assuming it's "buy" or "sell", want a default as long as longest real values
}