sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB databas schema design

Jag skulle gå med följande struktur:

  1. Använd en samling för alla åtgärder som hände, Actions

  2. Använd en annan samling för vem som följer vem, Subscribers

  3. Använd en tredje samling, Newsfeed för en viss användares nyhetsflöde fläktas artiklar ut från Actions samling.

Newsfeed samlingen kommer att fyllas i av en arbetsprocess som asynkront bearbetar nya Actions . Därför kommer nyhetsflöden inte att fyllas i realtid. Jag håller inte med Geert-Jan i att realtid är viktigt; Jag tror att de flesta användare inte bryr sig om ens en minuts försening i de flesta (inte alla) applikationer (i realtid skulle jag välja en helt annan arkitektur).

Om du har ett mycket stort antal consumers , fan-out kan ta ett tag, sant. Å andra sidan kommer det inte att fungera att sätta in konsumenterna direkt i objektet med särskilt stora antal följare, och det kommer att skapa alltför stora objekt som tar upp mycket indexutrymme.

Men viktigast av allt är att fan-out-designen är mycket mer flexibel och tillåter relevanspoäng, filtrering etc. Jag har nyligen skrivit ett blogginlägg om nyhetsflödesschemadesign med MongoDB där jag förklarar en del av den flexibiliteten mer i detalj.

På tal om flexibilitet, jag skulle vara försiktig med den där activitystrea.ms-specifikationen. Det verkar vara vettigt som en specifikation för interop mellan olika leverantörer, men jag skulle inte lagra all den utförliga informationen i min databas så länge du inte har för avsikt att aggregera aktiviteter från olika applikationer.



  1. Hur använder man redis PUBLISH/SUBSCRIBE med nodejs för att meddela klienter när datavärden ändras?

  2. Är master alltid omdisponerad instans med minsta prioritet?

  3. Få en räkning av totala dokument med MongoDB när du använder limit

  4. Gruppera efter specifikt element av array med mongo-aggregationsramverk