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

mongo db design af følgende og feeds, hvor skal jeg indlejre?

Generelt er det en dårlig idé at indlejre følgende/efterfulgte relationer i brugerdokumenter af flere årsager:

(1) der er en maksimal dokumentstørrelsesgrænse på 16 MB, og det er sandsynligt, at en populær bruger af et godt abonnent websted kan ende med hundredtusindvis af følgere, som vil nærme sig den maksimale dokumentstørrelse,

(2) tilhængerforhold ændrer sig ofte, og det tilfælde, hvor en bruger får mange følgere, udmønter sig i gentagne dokumentvækst, hvis du integrerer følgere. Hyppig dokumentvækst vil væsentligt hæmme MongoDB-ydelsen, og bør derfor undgås (lejlighedsvis vækst af dokumenter, især fordi dokumenter har en tendens til at nå en stabil endelig størrelse, er mindre en præstationsstraf).

Så ja, det er bedst at opdele følgende/efterfulgte forhold i en separat samling af poster, der hver har to felter, f.eks. { _id :, oid :}, med indekser på _id (for "hvem følger jeg? " query) og oid (for "hvem følger mig?"-forespørgslen). Enhver individuel tilstandsændring er modelleret af en enkelt tilføjelse eller fjernelse af dokument, men hvis du også viser ting som f.eks. følgerantal, bør du nok beholde separate tællere, som du opdaterer efter enhver indsættelse/sletning af kant.

(Dette forudsætter selvfølgelig, at dine forretningskrav giver dig en vis fleksibilitet med hensyn til konsistensdetaljerne:generelt, hvis din visningskode fortæller en bruger, at han har 304 følgere og derefter fortsætter med at opregne dem, vil kun den mest kræsne bruger kontrollere, at de optegnede følgere tal op til 304. Hvis forretningskrav kræver absolut konsistens, har du enten brug for en database, der isolerer transaktioner for dig, eller også skal du selv foretage optællingen som en del af visning af alle brugeridentiteter.)




  1. MongoDB find underdokument og sorter resultaterne

  2. Mongodb aggregat:konverter dato til en anden tidszone

  3. Hvordan kan jeg lokke Spring Data til at vise mig mongos forespørgselsplan (a.k.a cursor.explain())

  4. Hvordan sammenligner man 2 mongodb-samlinger?