Tworzenie czegoś podobnego do facebookowego walla

0

Hej, mam problem ponieważ szukam rozwiązania (wydajnego) aby zrobić coś na zasadzie facebookowego walla tylko na profilach z forum. Potrzebuję na każdym profilu zrobić dziennik aktywności użytkownika (np. napisałeś posta, dostałeś głos w górę, oddałeś głos w dół). Problem jest w tym, że wszystkie te wydarzenia są rozrzucone po kilku tabelach w bazie danych. Napisałem duże zapytanie do bazy (tak wszystkie rzeczy które potrzebowałem były zaindexowane) ale było to bardzo nie wydajne, więc muszę znaleźć inny sposób na rozwiązanie tego. Pomyślałem więc, że może w każdej metodzie która gdzieś jest (dodawanie posta, oddawanie głosu itd) dodać tworzenie JSONa z danego zdarzenia i przekazanie go do osobnej logiki, która będzie odpowiedzialna za te wszystkie activities (nie jestem pewien czy się tak da). Jeżeli tak się nie da to niestety nie mam pomysłu i szukam jakiegoś wsparcia tutaj. Także wszelkie pomysły jak to można rozwiązać itd mile widziane :).

0

tworzenie jsona nie jest dobrym pomyslem bo zaraz bedziesz miec roznice danych na profilach a w bazie danych

Pokaz jak wyglada schemat bazy i pokaz jakie zapytanie wysylales.

Poczytaj takze o lazy loading, nie potrzebujesz miec zapewne wszystkich aktywnosci danego uzytkonika tylko np top10 (co znacznie przyspieszy zapytanie)

0

Głównie z tych tabel muszę mieć dane.
Zapytania nie mam zapisanego ale było podobne do tego: (to jednak w miarę sprawnie się ładuje) (problemem jest to, że w 3 tabelkach jest parametr data)

SELECT t.Topic_ID, t.T_Message, t.T_date, t.T_subject, t.T_del, t.T_vote_up_sum, t.T_vote_down_sum, t.T_Originator, t.Forum_id,
v.Topic_ID, v.Reply_ID, v.Member_ID, v.Vote_Member_ID, v.vote, v.data,
 r.Reply_ID, r.Topic_ID, r.R_Posted_By, r.R_Message, r.R_Posted, r.Forum_id, r.R_vote_up, r.R_vote_down
FROM (topics t LEFT OUTER JOIN votes v ON t.T_Originator = v.Vote_Member_ID AND t.T_Originator = v.Member_ID) LEFT OUTER JOIN reply r ON t.T_Originator = r.R_Posted_By WHERE t.T_Originator = 585273 ORDER BY t.T_date DESC 

Problem polega na tym, że jest to duże forum, więc wieczorem do 1500os na nim siedzi i mój przełożony powiedział, że siądzie to na wydajności i muszę znaleźć jakiś inny sposób na rozwiązanie tego problemu. Powiedział, żebym na początek zbudował logikę aktywności, jednak pierwszy raz zdażyło się, że nie mam pomysłu jak to zrobić.

0

Dzięki za wszelką pomoc, ogólnie to rozwiązałem problem za pomocą LINQ, ogólnie wykoszystałem trochę 3 metody które napisałem gdzieś indziej, żeby pobrać wszystkie informacje, następnie stworzyłem z nich listę i za pomocą takiego zapytania rozwiązałem problem.
ActivityList.OrderByDescending(x => MaxOfThreeDate(x.data, x.R_Posted, x.T_date)).ToList();
Całość wyświetliłem na wcześniej zrobionym profilu użytkownika już bez większych kłopotów przez jQuery i ładuję to dynamicznie AJAXEM, na start ładuje 10 rekordów potem trzeba nacisnąć buttona a potem leci już przy scrollu :). Jutro dam rezultat do Seniora i zobaczymy co powie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.