2010-02-03 13 views
5

Jak mogę wprowadzić funkcję Facebook NewsFeed jak w mojej aplikacji społecznościowej opartej na PHP? Na przykład "X użytkownik załadował nowe zdjęcie, Z uczestnicząc w wydarzeniu". Pobieranie wszystkich tych danych z różnych tabel pochłania zbyt dużo zasobów.Jak Facebook lubi kanały informacyjne?

Dzięki.

Odpowiedz

7

Jest kilka sposobów na zrobienie tego, ale proponuję to. Zachowaj tabelę "historii", w której znajdują się wszystkie rekordy dla każdego użytkownika, znacznik czasu i opis działania wraz z flagami (lub wstępnie zdefiniowanymi kluczami), dla określonego typu działania. Umożliwiłoby to selektywne wysyłanie zapytań do pojedynczej tabeli dla określonych typów działań w ramach ustawionego czasu wyświetlania. Jednak w przypadku dużej liczby użytkowników ta tabela szybko się rozrośnie, więc możesz rozważyć usunięcie starych danych, o których wiesz, że nie wykorzystasz ich później. Zwróć szczególną uwagę na indeksy, aby szybko przechowywać zapytania i rozważ użycie buforowania zapytań, ponieważ prawdopodobnie będziesz często generował te same wyniki.

Tak długo, jak nie planujesz użyć tych historycznych danych do audytu działań użytkowników, powinno być dobrze zrzucić je po pewnym czasie. Jeśli potrzebujesz ścieżki audytu, być może musisz rozważyć utworzenie tabeli temp_history dla pokazania ostatnich akcji, a następnie w CRON przenieść swoje ostatnie akcje do stałej tabeli kontroli dla długoterminowego przechowywania.

+1

Dzięki. to jest to! – cnkt

1

Myślę, że odpowiedziałeś na własne pytanie: wyciągnij dane z pojedynczej tabeli.

Proste podejście polega na tym, że wszystkie inne komponenty mogą rozmawiać z centralnym "rejestratorem zdarzeń", który rejestruje coś dla kanału informacyjnego dla użytkowników.

1

Podobało mi się rozwiązanie Paula (łatwe w przypadku niektórych frameworków, takich jak Symfony). Jeśli chcesz zwiększyć szybkość, możesz skorzystać z systemu buforowania dla każdego użytkownika, który będzie wyszukiwał dane i tworzył nowe kanały na pierwsze żądanie. Następnie pobierz dane z pamięci podręcznej dla kolejnych żądań. Rejestrator zdarzeń wyczyści pamięć podręczną dla zainteresowanych użytkowników podczas śledzenia.

W przypadku Facebooka, myślę, że używają implementacji ajaxowej "push" do powiadamiania strony klienta, że ​​są wiadomości do pokazania.

System buforowania oparty na Xcache, Apc lub systemie plików może pomóc w zbudowaniu takiego systemu.

+0

Nie byłoby dobrym pomysłem utworzenie/modyfikacja indeksu kanałów informacyjnych po pojawieniu się nowego elementu (obraz, aktualizacja statusu). Czy tworzenie indeksu na żądanie jest lepsze? (1 = tworzenie wierszy tabeli kanałów informacyjnych, gdy użytkownik przesyła zdjęcie z wiadomościami 2 = tworzenie wierszy tabeli kanałów informacyjnych, gdy użytkownik szuka strony z wiadomościami 1 lub 2?) – cnkt

+0

Oba są możliwe, aby osiągnąć docelową wydajność, należy porównać liczbę żądań jednego użytkownika jego aktualności w porównaniu do tego, ile razy zdjęcia są modyfikowane. Ta operacja może nie być banalna, ale jeśli aplikacja została już "przełożona" na żywo, należy pobrać takie dane ze statystyk (GA), a nawet z plików dzienników serwera WWW – Benoit

3

Zacznij od zdefiniowania tego, co nazywasz aktywnością w swojej witrynie. Działanie może zawierać wiele hiperłączy. Pomóc może tutaj tablica wielowymiarowa php, która może być w tabeli jako obiekt serializowany.

Say x jest teraz połączony z y, z, a i b. możesz zdefiniować y, z, a i b jako odnośniki profilu. Powiedz x skomentował nowe zdjęcie. W tym przypadku y stają się nowym hiperłączem do zdjęcia profilowego osoby. Say x został fanem grupy zoozoo. W tym przypadku zoozoo staje się hiperłączem do strony fanowskiej.

Utwórz tabelę działań, aby ją skalować na dużą skalę, aby była aktywna_USER_ID, za każdym razem, gdy użytkownik zarejestruje twoją tabelę i sprawdź, czy nie musisz jej ponownie tworzyć.

Zdefiniuj aktywność jak w 1,2,3 lub cokolwiek uważasz za najlepszą aktywność, jaką ludzie mogą być zainteresowani społecznościami, które wspierasz.

Struktura tabeli powinna być prosta: tablica aktywności php, znacznik czasu. Jeśli używasz jQuery i Ajax do wypełnienia czynności jak zrobione na facebooku za pomocą przewijania myszy, zawsze możesz przekonwertować tablicę php na json i sformatować ją po stronie klienta.

Czy to gdy użytkownik loguje się.

Jeśli baza użytkowników jest duża powiedzieć milion to może chcesz umieścić w jakimś systemie przetwarzania zadań, które będzie można umieścić wydarzenia w event_MM_DD_YYYY i można wtedy zrobić przetwarzania wsadowego te zdarzenia, aby zapisać je w tabeli działań.

Nigdy nie wyświetlaj więcej niż 10 20 30 ostatnich czynności.

Mam nadzieję, że to ci pomoże :)

+0

Nie polecam czyszczenia danych. Menedżerowie chcą być bardzo zainteresowani poznaniem popularnej aktywności na stronie internetowej w danym miesiącu, w takim przypadku możesz mieć zlecenia cron, które będą wypełniać inną tabelę statystyk, która będzie odzwierciedlona w Systemie Zarządzania Informacją. –

Powiązane problemy