Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][MySQL][PHP]Cachowanie wyników sortowania
Userr
post 10.03.2017, 12:32:27
Post #1





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 27.10.2015

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post 10.03.2017, 12:59:02
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Userr
post 10.03.2017, 13:05:20
Post #3





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 27.10.2015

Ostrzeżenie: (0%)
-----


Sądzę, że okolo 10 000.

Ten post edytował Userr 10.03.2017, 13:06:02
Go to the top of the page
+Quote Post
nospor
post 10.03.2017, 13:07:18
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




To dla bazy cale nic. Zaloz poprostu index na to pole i po sprawie


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Pyton_000
post 10.03.2017, 13:32:59
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Userr
post 10.03.2017, 14:14:27
Post #6





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 27.10.2015

Ostrzeżenie: (0%)
-----


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?


Ten post edytował Userr 10.03.2017, 14:16:16
Go to the top of the page
+Quote Post
ohm
post 10.03.2017, 15:03:51
Post #7





Grupa: Zarejestrowani
Postów: 623
Pomógł: 144
Dołączył: 22.12.2010

Ostrzeżenie: (0%)
-----


Ale baza danych też cache'uje wyniki smile.gif więc nie ma sensu dla tak małej ilości tworzyć swojego cache'u.
Go to the top of the page
+Quote Post
Userr
post 10.03.2017, 16:37:11
Post #8





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 27.10.2015

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Userr 10.03.2017, 16:38:22
Go to the top of the page
+Quote Post
nospor
post 10.03.2017, 17:20:14
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
ohm
post 10.03.2017, 18:55:14
Post #10





Grupa: Zarejestrowani
Postów: 623
Pomógł: 144
Dołączył: 22.12.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 05:02