sql >> Databasteknik >  >> NoSQL >> MongoDB

mongo db design av följande och flöden, var ska jag bädda in?

I allmänhet är det en dålig idé att bädda in följande/följda relationer i användardokument av flera anledningar:

(1) det finns en maximal gräns för dokumentstorlek på 16 MB, och det är troligt att en populär användare av en välprenumererad webbplats kan sluta med hundratusentals följare, vilket kommer att närma sig den maximala dokumentstorleken,

(2) anhängarrelationer förändras ofta, så fallet där en användare får många följare leder till upprepad dokumenttillväxt om du bäddar in följare. Frekvent dokumenttillväxt kommer avsevärt att hindra MongoDB-prestanda, och bör därför undvikas (tillfällig dokumenttillväxt, särskilt om dokument tenderar att nå en stabil slutstorlek, är mindre av en prestationsstraff).

Så, ja, det är bäst att dela upp följande/följda av relation i en separat samling poster som var och en har två fält, t.ex. { _id :, oid :}, med index på _id (för "vem följer jag? " query) och oid (för frågan "vem följer mig?"). Varje individuell tillståndsändring modelleras av ett enda dokument som tilläggs eller tas bort, men om du också visar saker som antal följare bör du förmodligen behålla separata räknare som du uppdaterar efter eventuell kantinsättning/-radering.

(Naturligtvis förutsätter detta att dina affärskrav ger dig en viss flexibilitet när det gäller konsistensdetaljerna:i allmänhet, om din visningskod talar om för en användare att han har 304 följare och sedan fortsätter att räkna upp dem, kommer bara den mest noga användaren att kontrollera att följarna som räknas upp stämma upp till 304. Om affärskrav kräver absolut konsekvens behöver du antingen en databas som isolerar transaktioner åt dig, eller så måste du räkna själv som en del av att visa alla användaridentiteter.)




  1. Aggregera med antalet underdokument som matchar villkoret och grupperingen

  2. Mongoose kastar felet "Fältet är inte i schemat" när ett fält definieras två gånger

  3. får ReplicaSetNoPrimary och MongoServerSelectionError-fel vid anslutning av MongoDB med nodejs

  4. Mongoose välj fält att returnera från findOneAndUpdate