![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 76 Pomógł: 7 Dołączył: 30.09.2006 Ostrzeżenie: (0%) ![]() ![]() |
Zastanawiam się, w jaki sposób zorganizować "znajomości" w serwisie, a ma to działać tak:
jeżeli zaprosiłem kogoś do znajomych to on musi to zaproszenie zaakceptować i jeżeli ktoś mnie zaprosił to muszę zaproszenie zaakceptować w przeciwnym wypadku na liście znajomych nie pojawi się zaproszona do znajomych osoba. Jak to optymalnie i możliwie prosto rozwiązać? Szukam tylko pomysłu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Tablica znajomi.
user1, user2, czy zaakceptowane user1 zaprasza, user2 jest zapraszany, czy zaakceptowane domyślnie przybiera wartość nie. Jeśli user2 nie przyjmie rekord jest kasowany, jeśli przyjmie czy zaakceptowane ma wartość tak. Pojawiają się tylko osoby, które mają czy zaakceptowane tak. Na przykład (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Jeśli po zaakceptowaniu user1 jest znajomym usera2 i również user2 znajomym usera1, to wystarczy dodać rekord: user2, user1, tak Ten post edytował Shili 10.07.2008, 23:38:31 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 76 Pomógł: 7 Dołączył: 30.09.2006 Ostrzeżenie: (0%) ![]() ![]() |
to chyba nie będzie zbyt optymalne rozwiązanie niestety. wyobraź sobie 100 000 użytkowników gdzie kazdy ma 50 znajomych - 5 000 000 rekordów w tabeli?
edit: a nie, przepraszam, 10 000 000 bo przecież trzeba dać dwa rekordy dla jednej znajomości wg. Ciebie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Ten post edytował pawkow 10.07.2008, 23:41:21 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 012 Pomógł: 109 Dołączył: 26.09.2003 Skąd: nexis.pl Ostrzeżenie: (0%) ![]() ![]() |
W efekcie końcowym musisz mieć tabelę, która posłuży za referencje między poszczególnymi osobami. Aplikacja obsługująca 100 000 osób posiada też duże zapotrzebowanie na pamięć - nie próbuj się przed tym bronić. Podczas zapraszania użyłbym jednak pośredniczącej tabli - np. zaproszenia, w której trzymane byłyby informacje: kto, kogo i na przykład kiedy. Pozostały już tylko odpowiednie reguły w kodzie i po zabawie.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat edit: a nie, przepraszam, 10 000 000 bo przecież trzeba dać dwa rekordy dla jednej znajomości wg. Ciebie W tym się pomyliłam, wystarczy zrobić przy wyświetlaniu prosty warunek or.Jednakże chcesz zrealizować coś takiego, jak wiele do wiele, nie obejdziesz tego inaczej, bo taka jest specyfikacja tej transakcji. Prawda jest taka, że zależności są robione w podobny sposób i w wielkich serwisach, jeśli dodatkowo założysz indeksy na pola userów, to wszystko się przyspieszy. Prawda jest taka, że można to zrobić inaczej. Możesz w tabeli użytkownicy zrobić pole znajomi i dopisywać tam kolejny numer znajomego i to czy zaproszenie już zostało przyjęte. Czyli wyglądałoby to na przykład tak: 21:t,42:n,14:t,5:t,62:t,523:t,53:n wystarczyłoby to "zaledwie" n+1 razy potraktować explodem, lub czymś podobnym. Masz jedno pole, nie ileś milionów rekordów. Ale przeważnie się tak nie robi, bo jest to wolniejsze niż trzymanie wszystkiego w osobnych rekordach plus indeksy. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 910 Pomógł: 44 Dołączył: 20.02.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
ale wezmy takie serwisy jak nasza klasa czy myspace. tam jest pare milionow userow i maja srednio po 200-300 znajomych. to jest kilka miliardow rekordow a jednak chodzi szybko(bez nk:D). jak to jest zrobione. tez sie na tym zastanawialem i nie doszedlem do tego
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
user_friends:
user_id|friend_id|status nie ma problemów choć na razie mam tylko 40 tysięcy userów. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 012 Pomógł: 109 Dołączył: 26.09.2003 Skąd: nexis.pl Ostrzeżenie: (0%) ![]() ![]() |
to jest kilka miliardow rekordow a jednak chodzi szybko A czemu miałoby spowalniać działanie serwisu? Skrypt pobiera tylko potrzebne mu rekordy i dlatego właśnie trzeba strukturę bazy danych zaplanować jak najlepiej, ale na pewno nie według zasady, żeby zajmowało jak najmniej miejsca. Szczerze nie wiem po co w ogóle tak nad tym rozmyślasz, bo nie sądzę żeby tworzony przez Ciebie serwis miał ani miliony użytkowników, ani w jakikolwiek sposób miał wolniej działać ze względu na złą ogranizację bazy danych. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 662 Pomógł: 45 Dołączył: 26.03.2007 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
A jeśli będziesz miał milion użytkowników, to dopiszesz do tego cachce i nie będzie obciążało bazy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 22:04 |