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
140MBHDD-plads, men også140MBaf 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 documentspr. 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
currentDatetilcogpricetilpdu kan skrive en ren kode og have et kort skema.