sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man hanterar relationer när man använder mongodb

EDIT:

Hittade precis ett svar av Brendan McAdams, kille från 10gen, som uppenbarligen är mycket auktoritativ än mig, och han rekommenderar att man bäddar in dokument.

äldre text:

Den första är att manuellt inkludera i varje kommentar ObjectID för användare som de tillhör.

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

Det andra och smarta sättet är att använda DBRefs

vi lägger till extra I/O till vår disk, förlorar prestanda, eller hur? (Jag är inte säker på hur detta fungerar internt) därför måste vi undvika länkning om möjligt, eller hur?

Ja - det skulle finnas en fråga till, men föraren kommer att göra det åt dig - du kan tänka på detta som ett slags syntax socker. Påverkar det prestandan? Det beror faktiskt också på :) En av anledningarna till att Mongo är så jäkla snabbt är att den använder minnesmappade filer och mongo gör det bästa av att hålla hela arbetsuppsättningen (plus index) direkt i RAM. Och var 60:e sekund (som standard) synkroniserar den RAM-ögonblicksbild med diskbaserad fil.
När jag säger working set , jag menar saker du arbetar med:du kan ha tre samlingar - foo , stapel , baz , men om du nu bara arbetar med foo och bar, borde de laddas i ram, medan baz förblir på disken övergiven. Dessutom tillåter minnesmappade filer att bara ladda en del av samlingen. Så om du bygger något som engadget eller techcrunch är det hög sannolikhet att fungerande set skulle vara kommentarer för de senaste dagarna och gamla sidor kommer att återupplivas mycket mer sällan (kommentarer kommer att skapas i minnet vid behov), så det gör det t påverka prestandan avsevärt.

Så sammanfattning:så länge du fortsätter att arbeta inställt i minnet (du kanske tror att det är läs/skriv-cache) går det supersnabbt att hämta dessa saker och ytterligare en fråga skulle inte vara ett problem. Om du arbetar med en dataskiva som inte passar in i minnet, skulle det bli snabbare försämring , men nu känner jag inte till dina omständigheter -- det kan vara acceptabelt, så i båda fallen tenderar jag att välja använd länkar.




  1. Hur man dynamiskt bygger en mongodb-fråga

  2. Skillnaden mellan StackExchange.Redis och ServiceStack.Redis

  3. nodejs-applikation - mongodb-anslutningen misslyckas med felet ECONNREFUSED

  4. MongoDB:upsert när arrayFilters inte kan hitta en matchning