Situation:Event-Feed-Implementierung - wird es skalieren?
Ich bin derzeit ein Zuführsystem für eine soziale Website entwerfen, wobei jeder Benutzer einen Feed ihrer Freunde Aktivitäten. Ich habe zwei mögliche Methoden, um die Feeds zu generieren, und ich möchte fragen, was am besten in Bezug auf die Skalierbarkeit ist.
Ereignisse von allen Benutzern werden in einer zentralen Datenbanktabelle event_log
gesammelt. Benutzer werden als Freunde in der Tabelle friends
gepaart. Das RDBMS, das wir verwenden, ist MySQL.
Standardmethode: Wenn ein Benutzer seine Vorschub Seite anfordert, erzeugt das System die Zufuhr von inneren event_log
mit friends
verbinden. Das Ergebnis wird dann zwischengespeichert und nach 5 Minuten auf Timeout gesetzt. Die Skalierung wird durch Variieren dieses Zeitlimits erreicht.
hypothetisierten Methode: Eine Task im Hintergrund ausgeführt wird und für jedes neues, nicht verarbeitete Element in event_log
, erstellt es Einträgen in der Datenbank-Tabelle user_feed
dieses Ereignisses mit allen Benutzern Paarung, die Freunde mit dem Benutzer sind, initiiert das Ereignis. Eine Tabellenzeile verbindet ein Ereignis mit einem Benutzer.
Die Probleme mit der Standardmethode sind bekannt - was wäre, wenn viele Caches von Personen gleichzeitig ablaufen würden? Die Lösung skaliert auch nicht gut - die Aufgabe besteht darin, Feeds so nahe wie möglich in Echtzeit zu aktualisieren
Die hypothetische Lösung in meinen Augen scheint viel besser; Die gesamte Verarbeitung erfolgt offline, sodass kein Benutzer darauf wartet, dass eine Seite generiert wird, und keine Joins vorhanden sind, sodass Datenbanktabellen über physische Maschinen hinweg erstellt werden können. Wenn ein Benutzer jedoch 100.000 Freunde hat und 20 Ereignisse in einer Sitzung erstellt, führt dies dazu, dass 2.000.000 Zeilen in die Datenbank eingefügt werden.
Frage:
Die Frage auf zwei Punkte läuft darauf hinaus:
- Ist das Worst-Case-Szenario oben problematisch erwähnt, dh nicht Tabellengröße einen Einfluss auf die Performance von MySQL haben und gibt es Probleme mit dieser Masseneinfügung von Daten für jedes Ereignis?
- Gibt es noch etwas, das ich verpasst habe?
wird es mischen !!! –