sql >> Database >  >> NoSQL >> MongoDB

Een gepersonaliseerde Facebook-achtige nieuwsfeed bouwen:SQL, MongoDB?

Je code zegt me niet veel; Ik denk dat het handig zou zijn als je je gegevensstructuur in gewone JSON / SQL zou kunnen opmaken.

Hoe dan ook, ik zou de stream van elke gebruiker naar MongoDB serialiseren. Ik zou de HTML om verschillende redenen niet in de database opslaan (althans niet op dat niveau van de software); in plaats daarvan moet u de relevante gegevens opslaan in een (mogelijk polymorfe) verzameling. Het ophalen van de nieuwsfeed is dan heel eenvoudig, indexering is eenvoudig, enz. De weergavestructuur zou in wezen niet veranderen. Als u later de HTML wilt wijzigen, is dat ook gemakkelijk.

Het nadeel is dat dit veel gegevens zal dupliceren. Als mensen veel volgers kunnen hebben, kan dit een probleem worden. Het gebruik van arrays van gebruikers-ID's in plaats van een enkele gebruikers-ID kan helpen (als de informatie voor alle volgers hetzelfde is), maar het is ook beperkt.

Voor zeer grote associatieproblemen is er alleen caching. Zoals ik het begrijp, is de magie van zowel Facebook als Twitter dat ze de db niet vaak raken en veel gegevens in het RAM-geheugen bewaren. Als je miljarden items aan elkaar koppelt, is dat zelfs in RAM een uitdaging.

De updates moeten continu worden geschreven in plaats van op uurbasis. Stel dat u veel verkeer heeft en dat de update per uur 30 minuten duurt. Nu is het ergste geval 90 minuten. vertraging. Als u wijzigingen just-in-time verwerkt, kunt u dit terugbrengen tot waarschijnlijk 5 minuten.

Je zult op een gegeven moment aannames moeten doen, caching en wat heuristieken gebruiken. Enkele voorbeelden:

  • Hoe recenter een tweet, hoe meer verkeer deze zal zien. Het heeft een grotere kans om te worden geretweet, en het wordt veel vaker gezien. Bewaar het in het RAM.
  • Je Facebook-tijdlijnoverzichtspagina van 1991 zal waarschijnlijk niet dagelijks veranderen, dus dit is een kandidaat voor outputcaching op de lange termijn.
  • De huidige Facebook-activiteit zal waarschijnlijk veel schrijven ondergaan. Uitvoercaching zal hier niet veel helpen. Nogmaals, het object moet in het RAM worden bewaard.



  1. Mongo DB-relaties tussen objecten

  2. Een klant vertellen waar de nieuwe Redis-master Sentinel gebruikt?

  3. Unieke index in mangoest werkt niet

  4. Resque op Heroku cedar stack Het aantal arbeiders bestaat nog nadat de arbeider is beëindigd