![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 0 Dołączył: 1.08.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cześć.
Jak już pisałem na forum (może ktoś kojarzy) tworzę nieduży systemik do katalogowania i oceniania moich planszowych gier. Chciałbym, aby była możliwość oceniania ich przez odwiedzających (możliwe, że kiedyś to się rozrośnie (IMG:style_emoticons/default/smile.gif) ). W bazie mam tabelę "ratings", w której trzymam ocenę (pole ratings_rate) i identyfikator gry (ratings_gameid). Wpadłem na pomysł, by pobrać te dane do pliku i dodać im numery, tak: Następnie wrzucam wynik do pliku, z niego robię tablicę, przy wywoływaniu listy gier includuje go, i biorę "nr" odpowiadający identyfikatorowi. Teraz pojawia się problem. Jeżeli założymy, że baza gier się rozrośnie (na początek będzie tam zbiór mój i kilku kolegów ze studiów) i wyniesie (luźno liczymy) 500 pozycji, to jak będzie z wydajnością? Chcemy zrobić więcej rankingów, m.in. wg wydawcy i roku wydania, to wszystko to są zapytania, pobierające przecież pięćset rekordów. Pomyślałem, żeby pobieranie rankingu zrobić w CRONie, raz na dobę. Ale wówczas problemem będzie to, że sortuję wyniki przez średnią arytmetyczną ocen. Mógłbym zamiast umieszczać wyniki w pliku, dawać je do bazy, ale problem główny leży w tym, czy zwykłe konto na serwerze "wydoli" z częstą aktualizacją takich rankingów, powiedzmy... no, szczerze, to przy każdej oddanej ocenie. A może macie jakiś inny sposób na ranking sortowany wg ocen? Korzystam z ADOdb, gdyby to miało w czymś pomóc. Ten post edytował spit 19.07.2010, 21:44:43 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
ad1) Wyzwalacze to taki mechanizm, który powoduje wywołanie pewnych operacji na bazie w momencie zajścia zdarzenia. Programuje się je bezpośrednio w bazie danych. Dzięki temu możesz napisać np. wyzwalacz, który zawsze po dodaniu oceny spowoduje naliczenie średniej dla danej pozycji.
W sieci jest sporo na temat wyzwalaczy (trigger) i procedur - pamiętaj tylko, że są one obsługiwane tylko w mysql 5.x Zamiast wyzwalaczy możesz zrobić to ręcznie dopisując odpowiednie zapytania w metodzie, która obsługuje dodanie oceny, ale wyzwalacze są bardziej eleganckie wg. mnie. Poza tym są wywoływane automatycznie, więc nie trzeba pamiętać o dopisywaniu tego samego kodu do każdej operacji zmieniającej tabelę z ocenami ad2) Co do rankingu to źle podchodzisz do sprawy - jeśli będziesz chciał przy każdej ocenie ustalić pozycję rankingową dla każdej pozycji to będzie to zawsze wywołanie wielu zapytań typu update. Znacznie lepszym rozwiązaniem w Twojej sytuacji będzie: - przechowywanie średniej dla danej gry w bazie i aktualizowanie jej po dodaniu nowej oceny (1 zapytanie) - dodaj po prostu 1 pole do tabeli w której przechowujesz gry o nazwie "srednia" - w celu wyciągnięcia rankingu używasz zwykłego "order by srednia" Sortowanie po liczbach w mysql jest bardzo wydajne więc spokojnie możesz to stosować bez obaw o wydajność. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 6.10.2025 - 03:07 |