Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Cachowanie wyników sortowania
Forum PHP.pl > Forum > Przedszkole
Userr
1. Przechowuje w tabeli MySQL dane bardzo wielu osób, coś w tym stylu:

Cytat
Imię Nazwisko Numer:
Jan Kowalski 634635325
Piotr Nowak 36746436
Tomasz Pietrzak 73622879
itd...


Na stronie te dane będą wyświetlane w formie tabeli HTML (<table>). Tabelę MySQL wystarczy posortować (po kolumnie numer - od największego do najmniejszego) raz na dzień i ponieważ tabela MySQL ma bardzo dużo wierszy, to postanowiłem, że będę cachował wynik sortowania i aktualizował raz na dzień po ponownym sortowaniu (żeby oszczędzić moc serwera). Rzecz w tym, że nigdy nie używałem cachownia na stronach i nie wiem, czy bardziej wydajniejsze rozwiązanie będzie gdy zacachuję posortowane wyniki od razu z kodem html tabelki:

  1. <tr>
  2. <td>Tomasz</td>
  3. <td>Pietrzak</td>
  4. <td>73622879</td>
  5. </tr>
  6.  
  7. <tr>
  8. <td>Jan</td>
  9. <td>Kowalski</td>
  10. <td>634635325</td>
  11. </tr>
  12.  
  13. <tr>
  14. <td>Piotr</td>
  15. <td>Nowak</td>
  16. <td>36746436</td>
  17. </tr>


czy tylko sam posortowane dane o osobach (jak ponizej)?

Cytat
Tomasz Pietrzak 73622879
Jan Kowalski 634635325
Piotr Nowak 36746436


Wydaje mi się, że wydajniej byłoby to zacachowac od razu z kodem HTML tabelki, bo jak będzie zacachowany tylko wynik sortowania, to dla każdego wiersza trzeba będzie robić coś w tym stylu:

  1. osoby_temp[$i] = explode(" ", $osoby[i]);


2. Z jakiego rozwiązania polecalibyście skorzystać na początku? Chodzi mi, żeby to było w miarę przystępne do nauki. Co powiecie o takiej klasie do cachowania?

Temat: klasa Cache
nospor
Co to znaczy "bardzo duzo"? 100? 200? 1000 ?
Nie powinienies cachowac calej tabeli. Powinienies zalozyc index na pole po ktorym sortujesz i poprostu sortowac. To powinno dzialac migusiem
Userr
Sądzę, że okolo 10 000.
nospor
To dla bazy cale nic. Zaloz poprostu index na to pole i po sprawie
Pyton_000
Pytanie zasadnicze jak często te dane wyświetlasz.
Ale cache praktycznie zawsze jest dobrym pomysłem (no chyba że pokazujesz dane raz na 1h to w tedy bezsens)

Cache robisz na danych z BD. Choć jak wolisz html teeeż można ale raczej nie zalecane.
Userr
Dane wyświetlane będą cały czas na stronie (a strona ma sporo użytkowników) i będą posortowane tylko raz na dzień. Więc pasowało mi to tutaj, żeby użyć cache – bo po co za każdym razem odwoływać się do bazy danych, skoro przez cały dzień na stronie będą wyświetlane te same dane.

Podałem trochę nieprecyzyjne dane w pierwszym poście. Chodzi o to, że liczby po których ma być sortowana tabela będą większe niż te przykładowe – będą miały 50 cyfr, a większe liczby sortuje się pewnie dłużej niż mniejsze.

Poza tym, te dane na stronie będę wyświetlał używając stronicowania, czyli nie będę wyświetlał 10 000 wierszy na jednej stronie, tylko po np. 100 na podstronach i będzie lista do stronicowania, która pozwoli przechodzić użytkownikom po kolejnych podstronach.

Czy przy takich założeniach lepiej założyć index na pole, czy lepiej użyć cachowania? A może i jedno i drugie rozwiązanie będzie dobre?

Cytat(Pyton_000 @ 10.03.2017, 13:32:59 ) *
Cache robisz na danych z BD. Choć jak wolisz html teeeż można ale raczej nie zalecane.


Mogę oczywiście zrobić na danych z BD, ale dlaczego cachowanie html raczej nie jest zalecane?
ohm
Ale baza danych też cache'uje wyniki smile.gif więc nie ma sensu dla tak małej ilości tworzyć swojego cache'u.
Userr
Ale tak cachuje sama z siebie? smile.gif

W tym przypadku (sortowanie po kolumnie "numer") trzeba chyba dodać index do kolumny "numer", żeby sortowanie było dużo szybsze (i mniej obciążało serwer)?

Jeżeli chciałbym dodać index do kolumny numer, to wystarczy jeden jedyny raz napisać poniższe zapytanie (np. zaraz po stworzeniu tej tabeli "osoby", nawet jeżeli nie ma tam jeszcze żadnych danych)?

Cytat
CREATE UNIQUE INDEX numer_malejaco ON osoby (numer)


Pole do które dodaje się index nie musi być chyba polem kluczowym?
nospor
Cytat
W tym przypadku (sortowanie po kolumnie "numer") trzeba chyba dodać index do kolumny "numer", żeby sortowanie było dużo szybsze (i mniej obciążało serwer)?
Tak, dokladnie o tym pisalem w moich dwoch wczesniejszych postach.

I tak, tak powinno wygladac zapytanie wykonane tylko raz.
I tak, zeby pole mialo index nie musi byc kluczem glownym
ohm
Cytat(Userr @ 10.03.2017, 16:37:11 ) *
Ale tak cachuje sama z siebie? smile.gif

Owszem, zależy od ustawień jeszcze, ale zazwyczaj ma przydzielone trochę pamięci na powtarzające się zapytania i często używane klucze.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.