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

Hvor skal jeg placere aktiviteters tidslinje i mongodb, indlejret i bruger eller separat?

Begge disse artikler er rigtige, og begge er forkerte.

At indlejre eller ikke at indlejre? Dette er det altid nøglespørgsmålet, og det kommer ned til dine behov, forespørgsler og opbevaring og endda dit arbejdssæt.

I slutningen af ​​dagen kan vi kun give tips, du faktisk ikke kan fortælle dig, hvilken der er bedst.

Men i betragtning af størrelsen af ​​et aktivitetsfeed ville jeg personligt ikke indlejre det, da det nemt kunne vokse over 16meg (pr. bruger), men for hastigheden og kraften i forespørgslen kan du f.eks. samle de sidste 20 aktiviteter for en bruger og derefter integrere det i brugerrækken (da de sidste 20 normalt er det, der forespørges mest på).

Men så afhænger indlejring af et aggregat, sharding kan tage sig af forespørgsler på enorme horisontalt skalerede samlinger, og at bruge de rigtige forespørgsler betyder, at du ikke får nogen reel fordel ved indlejring og potentielt kan gøre dit liv sværere ved at skulle vedligeholde indekser, lager og forespørgsler, der kræves for at vedligeholde dette underdokument.

Hvad angår indlejring til dødspunktet. Mange MongoDB'er, der forespørger i øjeblikket, er for det meste afhængige af indlejring på et eller to niveauer, så det er derfor, det kan blive svært at vedligeholde f.eks. 12 indlejrede tabeller, på hvilket tidspunkt du begynder at se spørgsmål her og Google-gruppen om, hvordan man vedligeholder sådanne et kæmpe dokument (svaret er klientsiden, hvis du virkelig vil).

I betragtning af dette ville jeg huse et aggregat på brugeren, hvilket betyder, at brugeren kan se deres egen eller andre brugers aktivitet enkeltvis med én rundtur.

Men i betragtning af, at en lærer højst sandsynligt skal have sideresultater fra alle brugere, ville jeg huse en separat aktivitetssamling og forespørge om det for dem. Sidesøgning af et aggregat af underdokumenter kræver et par forespørgsler, og i dette tilfælde ville det være bedre bare at gøre det på denne måde.

Forhåbentlig kan det få dig i gang.



  1. Kan denne teknologi stable skala?

  2. Opdater et MongoDB-underdokument, når det overordnede dokument muligvis ikke eksisterer

  3. Hvordan samler man summen i MongoDB for at få et samlet antal?

  4. Redis-forbindelse/bufferstørrelsesgrænse overskredet