sql >> Database teknologi >  >> NoSQL >> MongoDB

omkostninger ved nøgler i JSON dokumentdatabase (mongodb, elasticsearch)

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 til c og price til p du kan skrive en ren kode og have et kort skema.



  1. Forespørgsel baseret på beregnede felter med Mongoid

  2. Aggreger med $sum i mongodb

  3. mongoose cursor batchSize

  4. Bemærk:Udefineret egenskab:MongoId