Du har korrekt bemærket, at dokumenterne vil have forskellig størrelse. Så du vil spare mindst 15 bytes
pr. dokument (60%
for lignende dokumenter), hvis du beslutter dig for at vedtage det andet skema. Dette vil ende med noget som 140MB
for dine 10 million
optegnelser. Dette vil give dig følgende fordel:
- HDD-besparelser. Det eneste problem er, at det for det meste er ubrugeligt at se på priserne for nuværende HDD.
- RAM-besparelse. I sammenligning med harddiske kan dette være nyttigt til indeksering. I mongodb skal arbejdssæt af indekser passe i RAM for at opnå en god ydeevne
. Så hvis du vil have indekser på disse to felter, sparer du ikke kun
140MB
HDD-plads, men også140MB
af potentiel RAM-plads (hvilket faktisk er mærkbart). - I/O . Der opstår mange flaskehalse på grund af begrænsningen af input/output-systemet (hastigheden på at læse/skrive fra disken er begrænset). For dine dokumenter betyder det, at du med skema 2 potentielt kan læse/skrive
twice as many documents
pr. 1 sekund. - netværk . I mange situationer er netværket endda meget langsommere end IO, og hvis din DB-server er på en anden maskine, så skal din applikationsserver sendes over ledningen. Og du vil også være i stand til at sende dobbelt så mange data.
Efter at have fortalt om fordele, er jeg nødt til at fortælle dig en ulempe for en lille nøgle:
- læsbarhed af databasen. Når du gør
db.coll.findOne()
og ser{_id: 1, t: 13423, a: 3, b:0.2}
det er ret svært at forstå, hvad der præcist er gemt her. - applikationens læsbarhed lignende med databasen, men her kan du i det mindste have en løsning. Med en kortlægningslogik, som transformerer
currentDate
tilc
ogprice
tilp
du kan skrive en ren kode og have et kort skema.