Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Paginacja - dużo rekordów
WashingtonPLx
post 7.11.2016, 00:02:13
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 24.05.2011

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


Zastanawiam się jak sobie poradzić z bardzo dużą ilością danych. Obecnie stosuję paginację (LIMIT), jednak aby wygenerować linki do następnych (1,2,3 itd...) stron zliczam wszystkie rekordy w bazie. Co z tego, że na stronie wyświetlę 10 rekordów jak i tak muszę za każdym odświeżeniem podstrony przeliczyć całą tabelę. Jak to jest rozwiązane np na demotywatory czy innych dużych serwisach ?
Go to the top of the page
+Quote Post
SmokAnalog
post 7.11.2016, 00:03:12
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


A ile czasu zajmuje Twojej bazie SELECT count(*)?
Go to the top of the page
+Quote Post
WashingtonPLx
post 7.11.2016, 00:10:57
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 24.05.2011

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


może sprecyzuję, że nie mam obecnie problemu z jakąś wielką liczbą danych. Zastanawiam się jak to jest rozwiązane w innych dużych serwisach bo raczej standardowego COUNT nie stosują
Go to the top of the page
+Quote Post
SmokAnalog
post 7.11.2016, 00:13:29
Post #4





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Duże serwisy często stosują modyfikacje systemów baz danych. Ale stare dobre count(*) jest z tego co wiem bardzo dobrze optymalizowane, choć pewności nie mam gdzie i czy w ogóle to prawda. Możesz zrobić test - wstaw do bazy baaaaardzo dużo rekordów i zobacz smile.gif
Go to the top of the page
+Quote Post
nospor
post 7.11.2016, 09:33:00
Post #5





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




Cytat
bo raczej standardowego COUNT nie stosują
A moge wiedziec czemu tak uwazasz? Czy moze poprostu strzelasz?

Tak, count() jest jak najbardziej ok w tym wypadku


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

"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
Puszy
post 7.11.2016, 14:14:28
Post #6





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

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


Cytat(nospor @ 7.11.2016, 09:33:00 ) *
A moge wiedziec czemu tak uwazasz? Czy moze poprostu strzelasz?

Tak, count() jest jak najbardziej ok w tym wypadku


Niekoniecznie, jeżeli mówimy o dużych tabelach lub wielu bazach count nie będzie zbyt opłacalny, dla przykładu: http://stackoverflow.com/a/6069288/2621852, polecam pogooglać count estimate i approximate count
Go to the top of the page
+Quote Post
Lion
post 7.11.2016, 22:29:28
Post #7





Grupa: Zarejestrowani
Postów: 148
Pomógł: 14
Dołączył: 23.02.2013

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


Skoro wiadomo że rekordów jest tak dużo to można pominąć zliczanie ile ich w rzeczywistości jest tylko wygenerować paginację dla 1,2,3 strony, a po przejściu na 3 dla 4,5,6, itd. Jeśli użytkownikowi uda się doklikać do ostatniej strony to po prostu można mu wyświetlić komunikat że dalej już nic nie znajdzie wink.gif


--------------------
Go to the top of the page
+Quote Post
Shou
post 8.11.2016, 01:07:59
Post #8





Grupa: Zarejestrowani
Postów: 13
Pomógł: 4
Dołączył: 6.11.2016

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


Jest jeszcze taki wynalazek jak SQL_CALC_FOUND_ROWS.
Go to the top of the page
+Quote Post
Puszy
post 8.11.2016, 09:31:52
Post #9





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

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


Cytat(Lion @ 7.11.2016, 22:29:28 ) *
Skoro wiadomo że rekordów jest tak dużo to można pominąć zliczanie ile ich w rzeczywistości jest tylko wygenerować paginację dla 1,2,3 strony, a po przejściu na 3 dla 4,5,6, itd. Jeśli użytkownikowi uda się doklikać do ostatniej strony to po prostu można mu wyświetlić komunikat że dalej już nic nie znajdzie wink.gif


Dokładnie, wszystko zależy czego się potrzebuje, można nawet zrobić to łopatologicznie i nastawić crona zrzucającego count do cache i wyświetlanie użytkownikowi przybliżoną ilość wyników tak jak to robią niektórzy klienci SQL.
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: 27.06.2025 - 13:36