Sie haben richtig bemerkt, dass die Dokumente unterschiedliche Größen haben. Sie sparen also mindestens 15 bytes
pro Dokument (60%
für ähnliche Dokumente), wenn Sie sich für das zweite Schema entscheiden. Dies wird in etwas wie 140MB
enden für Ihre 10 million
Aufzeichnungen. Dadurch haben Sie folgenden Vorteil:
- Festplatteneinsparungen. Das einzige Problem ist, dass dies angesichts der Preise für aktuelle Festplatten meist unbrauchbar ist.
- RAM-Einsparung. Im Vergleich zu Festplatten kann dies für die Indizierung nützlich sein. In Mongodb sollte der Arbeitssatz von Indizes in den RAM passen, um ein gutes Ergebnis zu erzielen Leistung
. Wenn Sie also Indizes für diese beiden Felder haben, sparen Sie nicht nur
140MB
Festplattenspeicher, sondern auch140MB
des potenziellen RAM-Speicherplatzes (der sich tatsächlich bemerkbar macht). - I/O . Viele Engpässe entstehen aufgrund der Beschränkung des Ein-/Ausgabesystems (die Lese-/Schreibgeschwindigkeit von der Festplatte ist begrenzt). Für Ihre Dokumente bedeutet dies, dass Sie mit Schema 2 potenziell
twice as many documents
lesen/schreiben können pro 1 Sekunde. - Netzwerk . In vielen Situationen ist das Netzwerk sogar viel langsamer als IO, und wenn sich Ihr DB-Server auf einem anderen Computer befindet als Ihr Anwendungsserver, müssen die Daten über das Kabel gesendet werden. Und Sie können auch doppelt so viele Daten senden.
Nachdem ich über Vorteile gesprochen habe, muss ich Ihnen einen Nachteil für einen kleinen Schlüssel nennen:
- Lesbarkeit der Datenbank. Wenn Sie
db.coll.findOne()
ausführen und sieht{_id: 1, t: 13423, a: 3, b:0.2}
Es ist ziemlich schwer zu verstehen, was hier genau gespeichert ist. - Lesbarkeit der Anwendung ähnlich mit der Datenbank, aber zumindest hier können Sie eine Lösung haben. Mit einer Mapping-Logik, die
currentDate
transformiert zuc
undprice
zup
Sie können einen sauberen Code schreiben und ein kurzes Schema haben.