Sytuacja:Implementacja źródła zdarzeń - czy będzie skalować?
Jestem obecnie projektowaniu systemu podawania na stronie społecznej przy czym każdy użytkownik ma paszy działalności swoich przyjaciół. Mam dwie możliwe metody generowania kanałów i chciałbym zapytać, która z nich jest najlepsza pod względem możliwości skalowania.
Zdarzenia od wszystkich użytkowników są gromadzone w jednej centralnej tabeli bazy danych, event_log
. Użytkownicy są sparowani jako znajomi w tabeli friends
. RDBMS, którego używamy, to MySQL.
metoda: Gdy użytkownik żąda ich stronie kanałów, system generuje paszy przez wewnętrzne połączenie event_log
z friends
. Wynik jest następnie buforowany i ustawiony na timeout po 5 minutach. Skalowanie uzyskuje się przez zmianę tego czasu oczekiwania. Metoda
hipotezę: Zadanie działa w tle i dla każdego nowego, nieprzetworzonego towaru w event_log
tworzy wpisy w tabeli bazy danych user_feed
Parowanie to wydarzenie ze wszystkimi użytkownikami, którzy są przyjaciółmi z użytkownikiem, który zainicjował wydarzenie. Jeden wiersz tabeli łączy jedno zdarzenie z jednym użytkownikiem.
Problemy z metodą standardową są dobrze znane - a jeśli wiele pamięci podręcznych osób wygaśnie w tym samym czasie? Rozwiązanie również nie jest skalowalne - w skrócie, aby aktualizacje były aktualizowane jak najbliżej czasu rzeczywistego.
Hipotezne rozwiązanie w moich oczach wydaje się znacznie lepsze; Całe przetwarzanie odbywa się w trybie offline, więc żaden użytkownik nie oczekuje na wygenerowanie strony i nie ma połączeń, dzięki czemu tabele bazy danych mogą zostać odrzucone na fizycznych maszynach. Jeśli jednak użytkownik ma 100 000 przyjaciół i tworzy 20 zdarzeń w jednej sesji, powoduje to wstawienie 2 000 000 wierszy do bazy danych.
Pytanie:
Pytanie sprowadza się do dwóch punktów:
- Jest to najgorszy scenariusz wymienione powyżej problemy, czyli ma wielkość stołu mieć wpływ na wydajność MySQL i czy są jakieś problemy z tym masowym wstawianiem danych dla każdego zdarzenia?
- Czy jest coś jeszcze, co przegapiłem?
będzie mieszać !!! –