sql >> Databasteknik >  >> NoSQL >> MongoDB

Konstruera ett personligt Facebook-liknande nyhetsflöde:SQL, MongoDB?

Din kod säger mig inte mycket; Jag tror att det skulle vara till hjälp om du kunde lägga upp din datastruktur i vanlig JSON / SQL.

Hur som helst, jag skulle serialisera varje användares ström till MongoDB. Jag skulle inte lagra HTML-koden i databasen av olika anledningar (åtminstone inte på den nivån av programvaran); istället bör du spara relevant data i en (eventuellt polymorf) samling. Då är det väldigt enkelt att hämta nyhetsflödet, indexering är okomplicerat, etc. Vystrukturen skulle i princip inte förändras. Om du senare vill ändra HTML är det enkelt också.

Nackdelen är att detta kommer att duplicera mycket data. Om människor kan ha många följare kan detta bli ett problem. Att använda uppsättningar av användar-ID istället för ett enda användar-ID kan hjälpa (om informationen är densamma för alla följare), men det är också begränsat.

För mycket stora associationsproblem finns endast cachning. Som jag förstår det är magin i både facebook och twitter att de inte träffar db särskilt ofta och håller mycket data i RAM. Om du associerar miljarder objekt är det en utmaning att göra det även i RAM.

Uppdateringarna bör skrivas kontinuerligt snarare än på timbasis. Anta att du har mycket trafik och att uppdateringen per timme tar 30 minuter. Nu är det värsta fallet en 90 min. dröjsmål. Om du bearbetar ändringar just-in-time kan du minska detta till förmodligen 5 min.

Du måste kasta in antaganden någon gång, använda caching och lite heuristik. Några exempel:

  • Ju nyare en tweet är, desto mer trafik kommer den att se. Det har en högre chans att retweetas, och det ses mycket oftare. Behåll det i RAM-minnet.
  • Din Facebook-tidslinjeöversiktssida från 1991 kommer förmodligen inte att förändras dagligen, så det här är en kandidat för långsiktig utdatacache.
  • Nuvarande Facebook-aktivitet kommer sannolikt att genomgå många skrivningar. Output caching hjälper inte mycket här. Återigen, objektet bör förvaras i RAM.



  1. MongoDB:vad är skillnaden mellan $elemMatch och $och att hitta objekt i arrayen?

  2. Hur hämtar man data från MongoDB?

  3. Tidsprecisionsproblem vid jämförelse i mongodb-drivrutin i Go och eventuellt i andra språk och annan databas

  4. Spring data mongodb - Alternativet 'markör' krävs