sql >> Database >  >> NoSQL >> MongoDB

MongoDB schema prestatie optimalisatie

Het eerste dat in u opkomt is:waarom kost het opslaan van een referentie u 5000 keer wat het kost om in een subdocument op te slaan?

Oké, als ik naar je schema kijk, denk ik dat de beste methode een aparte verzameling is voor woorden, niet voor pakketten.

De eerste rode vlag die ik zag, is je dubbele nesting hier:

packages : [{
    package : {type: Schema.Types.ObjectId, ref: 'Packages'},
    from : {type : Schema.Types.ObjectId, ref :'Languages'},
    to : {type : Schema.Types.ObjectId, ref :'Languages'},
    words : [{
        word: {type: String},
        progress: {type: Number,default : 0}
    }]
}]

De words subdocument zal erg moeilijk zijn om mee te werken in de huidige versie van MongoDB, normaal gesproken beginnen 2-3 niveaus diep problemen te krijgen, vooral met positionele operators.

Nu je bedenkt dat je altijd moet werken met de hoogst mogelijke waarde die je hier kunt krijgen:

U moet ook rekening houden met de kosten van huisvesting in dit document. De operators die u nodig hebt, zijn in het geheugen opgeslagen, zoals $pull , $push , $addToSet enz. wat betekent dat uw hele document moet worden geserialiseerd en in MongoDB's native C ++ -structuren moet worden geladen. Dit zal een uiterst tijdrovende taak zijn, afhankelijk van het verkeer naar die documenten.

Gezien je opmerking:

het slaat alleen maar een nieuwe nagel aan de doodskist van het inbedden van de woorden in het hoofdgebruikersdocument. Gezien wat ik in de vorige paragraaf zei, zal dit niet goed werken met de kosten van het gebruik van in-memory operators op de words array.

Dit werkt veel beter als de woorden worden opgesplitst, $slice is ook een in-memory operator en zou hier waarschijnlijk te lijden hebben van verminderde prestaties.

En dat is een snelle gemotiveerde reactie. Ik weet zeker dat ik meer zou kunnen uitleggen over mijn reden, maar dat zou genoeg moeten zijn.



  1. MongoDB databaseschema-ontwerp

  2. Ember, Ember Data en MongoDB's _id

  3. Hoe kan ik MongoDB instellen op een Node.js-server met node-mongodb-native in een EC2-omgeving?

  4. Filteraggregatie maken in het voorjaar