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

Hvordan man håndterer forhold, mens man bruger mongodb

EDIT:

Har lige fundet et svar af Brendan McAdams, fyr fra 10gen, som tydeligvis er meget autoritativ end mig, og han anbefaler at indlejre dokumenter.

ældre tekst:

Den første er manuelt at inkludere objekt-ID til hver kommentar for den bruger, de tilhører.

comment: { text : "...", 
           date: "...", 
           user: ObjectId("4b866f08234ae01d21d89604"),
           votes: 7 }

Den anden og smarte måde er at bruge DBRefs

vi føjer ekstra I/O til vores disk, mister ydeevnen, ikke sandt? (jeg er ikke sikker på, hvordan dette fungerer internt) og derfor skal vi undgå at linke, hvis det er muligt, ikke?

Ja - der ville være en forespørgsel mere, men driveren vil gøre det for dig - du kan tænke på dette som en slags syntaks sukker. Påvirker det ydeevnen? Det afhænger faktisk også :) En af grundene til, at Mongo er så vildt hurtig, er, at den bruger hukommelseskortlagte filer og mongo forsøger det bedst at holde hele arbejdssættet (plus indekser) direkte i RAM. Og hvert 60. sekund (som standard) synkroniserer den RAM-snapshot med diskbaseret fil.
Når jeg siger arbejdssæt , jeg mener ting, du arbejder med:du kan have tre samlinger - foo , bjælke , baz , men hvis du nu kun arbejder med foo og bar, burde de indlæses i ram, mens baz forbliver på disken forladt. Desuden tillader hukommelseskortede filer kun at indlæse en del af samlingen. Så hvis du bygger noget som engadget eller techcrunch, er der stor sandsynlighed for, at arbejdssættet ville være kommentarer for de sidste par dage, og gamle sider vil blive genoplivet langt sjældnere (kommentarer vil blive affødt til hukommelsen efter behov), så det gør' t påvirke ydeevnen markant.

Så opsummering:så længe du bliver ved med at arbejde indstillet i hukommelsen (du tror måske, det er læse/skrive-cache), er hentning af disse ting superhurtigt, og endnu en forespørgsel ville ikke være et problem. Hvis du arbejder med et udsnit af data, der ikke passer ind i hukommelsen, ville der være hastighed nedbrydning , men jeg kender ikke dine omstændigheder nu -- det kunne være acceptabelt, så i begge tilfælde har jeg en tendens til at vælge brug linker.




  1. Mongoose skema sæt tidsstempel på indlejret dokument

  2. I Jongo, hvordan man finder flere dokumenter fra Mongodb ved hjælp af en liste over ID'er

  3. Mongoose:findOneAndUpdate returnerer ikke opdateret dokument

  4. Mongo $regex med parentes og ordgrænse