Czy podział na strony zmniejsza obciążenie serwera? (teoria)

11

Zastanawiałem się, jaki jest powód paginacji? Czy jest używany, ponieważ zmniejsza obciążenie serwerów, ponieważ technicznie ograniczamy liczbę wierszy zwracanych na stronę?

Chciałem zrobić coś bez podziału na strony, ale biorąc pod uwagę, że jestem nowy (jestem amatorem), zacząłem się zastanawiać, czy technicznie jest OK.

Sam Khan
źródło
Czy naprawdę chcesz poczekać, aż przeglądarka pobierze i wyświetli tysiące wierszy pytań, na których nie masz wpływu, gdy klikniesz „Pytania” na tej stronie?
Jeremy
3
paginacja jest bardziej dla ludzi niż DB.
Malfist

Odpowiedzi:

10

Istnieje wiele powodów podziału na strony, zmniejszenie obciążenia serwera to tylko jeden z nich. Jednak Stephen Orr podnosi ważny punkt - nadal musisz najpierw znaleźć ilość danych. Musisz upewnić się, że to zapytanie jest szybkie i nie powoduje nadmiernego obciążenia serwera.

Inne powody to:

  • Zmniejszenie ilości danych zwracanych do klienta za jednym razem. Jeśli masz dużo danych, może to zająć sporo czasu i zająć dużo pamięci.
  • Użytkownik często nie jest zainteresowany wszystkimi danymi, ale tylko najnowszymi (powiedzmy). Zwracając tylko kilka stron danych, których nie otrzymujesz, użytkownik nigdy nie zobaczy.

W obu tych przypadkach nie chcesz, aby użytkownik czekał - na dane, których nie będą oglądać, lub na wszystkie dane, gdy mogą uzyskać jeden z przetwarzania niektórych z nich.

ChrisF
źródło
2
+1 Pisałem coś podobnego, ale byłeś zbyt szybki. Pozwolę sobie tylko dodać, że treść stronicowana jest również (ab) używana jako sposób wyświetlania większej liczby dodatków.
yannis
Możesz także tworzyć strony bez konieczności sprawdzania, ile jest stron, wiedząc, że jest więcej danych niż mieści się na bieżącej stronie.
Carlo Kuip
3

Różni się w zależności od implementacji.

Przyspieszy renderowanie strony, ale niekoniecznie zmniejszy obciążenie serwera. Większość naiwnych algorytmów stronicowania musi najpierw wykonać zapytanie, aby zdecydować, ile stron powinno być, a następnie ponownie wykonać zapytanie, aby uzyskać zestaw wyników „stronicowany”.

Steve Hill
źródło
Najbardziej naiwne algorytmy stronicowania muszą najpierw wykonać zapytanie, aby zdecydować, ile stron powinno być : Ale skumulowane obciążenie bazy danych zapytania liczenia i zapytania wynikowego z podziałem na strony jest prawie zawsze znacznie mniejsze niż zapytanie typu „wszystko” w typowym scenariuszu (z ładnie ustrukturyzowaną relacyjną bazą danych)
yannis
@YannisRizos, absolutnie. Właśnie widziałem ciemną stronę tego, z niewiarygodnie źle zbudowaną relacyjną bazą danych (wiele naszych zapytań ŁĄCZY 7 lub 8 różnych tabel, aby uzyskać wynik).
Steve Hill
@YannisRizos: zdefiniuj „stres na db”. Wciąż przesuwasz dwa zapytania w poprzek linii. Czy paginujesz w zapytaniu (superselekcja liczby wierszy), czy buforujesz wyniki w innej warstwie? Jest o wiele za dużo zmiennych, aby powiedzieć, że występuje zbyt duże obciążenie db. Twierdziłbym, że właściwie wykonane w sensie transakcyjnym (czy pozwalasz na brudny odczyt / niespójną liczbę na stronach?) Zwiększa db "stres" / ładowanie, ale upraszcza programowanie.
Jé Queue
@ Xepoch Nie powiedziałem zbyt dużego stresu, tylko to, że każda liczba plus ograniczony wybór <pełny wybór. Dotyczy to tylko typowych scenariuszy na dobrze ustrukturyzowanych relacyjnych plikach db.
yannis
1

Największą korzyścią wynikającą z paginacji jest zwiększenie szybkości aplikacji przez:

1 - Ograniczanie danych przesyłanych między klientem a serwerem. Nie ma sensu czytać 1000000 klientów, jeśli użytkownik szuka 10 z nich.

2- Znacząco przyspieszenie wydajności zapytania poprzez pobieranie tylko wierszy pasujących do widoku użytkownika. Nie ma sensu czytać 1000000 klientów, jeśli użytkownik spojrzy na pierwszych 10 klientów.

3 - Podział na strony pomaga, dostarczając więcej świeżych danych. Jeśli aplikacja wyświetla wiele wierszy danych, a domena aplikacji wymaga dużej aktualizacji wierszy danych w wyświetlanej tabeli, istnieje prawdopodobieństwo, że do czasu przejścia na stronę 20 listy stron dane w niektórych wierszach byłyby zmienione. Pomyśl o aplikacji, która odczytuje ceny akcji lub dostępne pokoje w hotelu. Pobieranie starych danych i umieszczanie ich na kliencie jest bezużyteczne.

Podział na strony to jedna ze strategii, która w połączeniu z filtrowaniem i zrozumieniem potrzeb użytkownika końcowego w danym scenariuszu (który ma doprowadzić do dobrego projektu spełniającego tę potrzebę) znacznie poprawi aplikację, szczególnie gdy kilku użytkowników trafi do bazy danych jednocześnie.

Programowanie stronicowania nie zawsze jest banalne. W niektórych przypadkach jest to proste, ale czasami jest bardzo skomplikowane, aby zapytanie SQL było wykonywane bez wykonywania pełnego skanowania tabeli. Zależy to oczywiście od twoich indeksów, warunków filtrowania i twojego oświadczenia Where.

Bez szans
źródło
-4

Moim zdaniem paginacja jest matką wszystkich przedwczesnych optymalizacji. Tworzenie strony bez podziału na strony jest całkowicie w porządku.

Jeśli po wydaniu okaże się, że ładujesz za dużo danych w jednym połączeniu lub że użytkownicy muszą czekać na informacje, których chcą, ponieważ jest zajęty ładowaniem danych, których nie chcą, śmiało napisz rozwiązanie Ajax który ładuje stronę tylko wtedy, gdy ludzie przewijają w dół (patrz: Twitter, Tumblr, wyszukiwanie grafiki Google).

Edycja: Drugi akapit powyżej został napisany przy założeniu, że powszechną odpowiedzią byłoby „ale jeśli wiesz, że w pewnym momencie zamierzasz dokonać paginacji, równie dobrze możesz to zrobić wcześniej, zamiast marnować czas na rozwijanie czegoś, co zamierzasz rzucić z dala."

Oprócz bycia matką wszystkich przedwczesnych optymalizacji, myślę, że paginacja jest koszmarem UX i że istnieją lepsze rozwiązania, które nie wymagałyby dodatkowego rozwoju na całej stronie.

Pomimo liczby głosów negatywnych, zostawiam tę odpowiedź tutaj, ponieważ podtrzymuję sentyment, nawet jeśli nie był to mój najlepszy tekst.

pdr
źródło
5
Zdecydowanie nie zgadzam się z tym stwierdzeniem, paginacja nie służy do optymalizacji DB, chodzi o dostarczanie ludziom danych w zarządzalnych częściach. Czy byłbyś w stanie przeczytać Harry'ego Pottera, gdyby wszystko było na jednej stronie? Czy byłbyś w stanie złożyć podatki, gdyby kod podatkowy znajdował się na jednej stronie?
Malfist
@Malfist: Jedynym powodem, dla którego nie mogłeś poradzić sobie z tymi rzeczami na jednej stronie, jest to, że sama strona byłaby za duża. To nie jest problem na stronach internetowych. Stąd strony, które cytowałem, znalazły lepsze rozwiązania do paginacji, podczas gdy Lolcats ma obecnie prawie 2000 stron, których nie można w żaden sposób rozsądnie podzielić na strony. Ale to twój głos, użyj go tak, jak chcesz.
pdr
1
@Malfist: Również dzielenie rzeczy na łatwe do zarządzania części jest wystarczająco sprawiedliwe, jeśli te części się nie przesuwają. Jeśli czytam strony 1-4, to chcę wrócić następnym razem i przeczytać stronę 5. Ale w wielu przypadkach stronicowane strony to listy pozycji, najpierw najnowsze. Więc kiedy wrócę do strony 5 później, w rzeczywistości pokazuje ona połowę strony 3 i połowę strony 4 od ostatniego razu, gdy tam byłem, ponieważ na liście znajduje się zupełnie nowe 1,5 strony.
pdr
2
-1 Ponieważ zdecydowanie się z tym nie zgadzam. Nie jestem nawet pewien, od czego zacząć wyjaśniać dlaczego.
Craige
@Craige: No dobrze. Z pewnością nie jestem w stanie podnieść zbyt wiele argumentów.
pdr