La paginazione riduce il carico del server? (teoria)


11

Mi chiedevo qual è il motivo dietro l'impaginazione? Viene utilizzato perché riduce l'onere per i server poiché limiteremmo tecnicamente la quantità di righe restituite per pagina?

Volevo fare qualcosa senza impaginazione ma dato che sono nuovo a questo (sono un dilettante) ho iniziato a chiedermi se tecnicamente fosse OK o no.


Vuoi davvero aspettare che il tuo browser scarichi e visualizzi migliaia di righe di domande che non ti interessano quando fai clic su "Domande" su questo sito?
Jeremy,

3
l'impaginazione è più per gli umani che per i DB.
Malfist,

Risposte:


10

Esistono diversi motivi per impaginare, ridurre il carico del server è solo uno. Tuttavia, Stephen Orr solleva un punto valido: è ancora necessario prima trovare la quantità di dati. Bisogna fare in modo che che domanda è semplice e non eccessivamente caricare il server.

Altre ragioni includono:

  • Ridurre la quantità di dati restituiti al client in una volta sola. Se disponi di molti dati, ciò potrebbe richiedere molto tempo e occupare molta memoria.
  • L'utente spesso non è interessato a tutti i dati, ma solo ai più recenti (diciamo). Restituendo solo un paio di pagine di dati non si ottengono dati che l'utente non vedrà mai.

In entrambi i casi non si desidera far attendere l'utente, né per i dati che non verranno visualizzati, né per tutti i dati che potrebbero ottenere uno con l'elaborazione di alcuni di essi.


2
+1 Stavo scrivendo qualcosa di simile, ma eri troppo veloce. Consentitemi di aggiungere che anche il contenuto di paginazione viene utilizzato (ab) per mostrare più aggiunte.
yannis,

Puoi anche creare pagine senza dover scoprire quante pagine ci sono, sapere che ci sono più dati di quelli che si adattano alla pagina corrente è abbastanza buono.
Carlo Kuip,

3

Varia a seconda dell'implementazione.

Accelererà il rendering di una pagina, ma non ridurrà necessariamente il carico sul server. Gli algoritmi di impaginazione più ingenui devono prima eseguire una query per decidere quante pagine dovrebbero esserci, quindi eseguire nuovamente la query per ottenere il set di risultati "impaginati".


Gli algoritmi di impaginazione più ingenui devono prima eseguire una query per decidere quante pagine dovrebbero esserci : Ma lo stress accumulato sul db della query di conteggio e la query di risultato impaginata è quasi sempre molto meno di una query di get tutto in uno scenario comune (con un database relazionale ben strutturato)
yannis

@YannisRizos, assolutamente. Ho appena visto il lato oscuro di questo, con un database relazionale incredibilmente mal strutturato (molte delle nostre query JOIN 7 o 8 tabelle diverse per ottenere un risultato).
Steve Hill,

@YannisRizos: definisci "stress sul db". Stai ancora inviando due query lungo la linea. Stai eseguendo la paginazione nella query (una super-selezione del conteggio delle righe) o i risultati della cache in un altro livello? Ci sono troppe variabili per dire che c'è troppo stress da db. Direi che fatto correttamente in senso transazionale (permetti una lettura sporca / conteggio incoerente nelle pagine?) Aumenta db "stress" / carico ma semplifica la programmazione.
Jé Queue,

@Xepoch Non ho detto troppo stress, solo che qualsiasi conteggio più una selezione limitata <selezione completa. E questo è solo per scenari comuni su dbs relazionali ben strutturati.
yannis,

1

Il maggior valore che si ottiene dall'impaginazione è il miglioramento della velocità dell'applicazione mediante:

1 - Limitazione dei dati trasmessi tra il client e il server. Non ha senso leggere 1000000 clienti se l'utente ne sta cercando 10.

2- Accelerare significativamente le prestazioni della query recuperando solo le righe che possono adattarsi alla vista di un utente. Non ha senso leggere 1000000 clienti se l'utente guarderà i primi 10 clienti.

3 - L'impaginazione aiuta fornendo dati più recenti. Se l'applicazione mostra molte righe di dati e il dominio dell'applicazione richiede molti aggiornamenti alle righe di dati nella tabella visualizzata, è probabile che prima di andare alla pagina 20 dell'elenco di pagine, i dati su alcune delle righe sarebbero stati cambiato. Pensa a un'applicazione che legge i prezzi delle azioni o le camere disponibili in un hotel. Il recupero di vecchi dati e la loro immissione sul client non è di alcuna utilità.

L'impaginazione è una strategia che in combinazione con il filtraggio e la comprensione di come l'utente finale necessita dal particolare scenario (che dovrebbe portare a una buona progettazione per soddisfare questa esigenza) migliorerà notevolmente l'applicazione specialmente quando diversi utenti colpiscono il database simultaneamente.

L'impaginazione non è sempre banale da programmare. In alcuni casi è semplice ma a volte è molto complesso scrivere in modo che la query SQL venga eseguita senza eseguire una scansione completa della tabella. Questo ovviamente dipende dagli indici, dalle condizioni del filtro e dall'istruzione Where.


-4

La paginazione, a mio avviso, è la madre di tutte le ottimizzazioni premature. È assolutamente ok scrivere il tuo sito senza impaginazione.

Se scopri, dopo il rilascio, che stai caricando troppi dati in una chiamata o che i tuoi utenti devono attendere le informazioni che vogliono perché sono occupate a caricare i dati che non vogliono, vai avanti e scrivi una soluzione Ajax che carica solo la pagina mentre le persone scorrono verso il basso (vedi: Twitter, Tumblr, ricerca di immagini di Google).

Modifica: il secondo paragrafo sopra è stato scritto supponendo che una risposta comune sarebbe "ma se sai che ad un certo punto stai per impaginare, potresti anche farlo in anticipo, piuttosto che perdere tempo a sviluppare qualcosa che stai per lanciare lontano."

Oltre ad essere la madre di tutte le ottimizzazioni premature, penso che l'impaginazione sia un incubo UX e che ci siano soluzioni migliori che non richiederebbero uno sviluppo extra in cima alla pagina completa.

Nonostante il numero di voti negativi, lascio qui questa risposta perché sostengo il sentimento, anche se potrebbe non essere stata la mia migliore scrittura.


5
Non sono assolutamente d'accordo con questa affermazione, l'impaginazione non è per l'ottimizzazione del DB, si tratta di fornire dati in blocchi gestibili agli umani. Saresti in grado di leggere Harry Potter se fosse tutto su una pagina? Saresti in grado di presentare le tasse se il codice fiscale fosse tutto su una pagina?
Malfist,

@Malfist: l'unica ragione per cui non puoi gestire queste cose su una pagina è perché la pagina stessa sarebbe troppo grande. Questo non è un problema nelle pagine Web. Quindi i siti che ho citato hanno trovato soluzioni migliori per l'impaginazione, mentre Lolcats ha attualmente quasi 2000 pagine che sono impossibili da impaginare in modo sensato. Ma è il tuo downvote, usalo come vuoi.
pdr

1
@Malfist: Inoltre, suddividere le cose in blocchi gestibili è abbastanza giusto se quei blocchi non si spostano. Se leggo le pagine 1-4, voglio tornare la prossima volta e leggere la pagina 5. Ma in MOLTI casi, i siti Web impaginati sono elenchi di elementi, il più recente per primo. Quindi, quando torno alla pagina 5 in seguito, in realtà mostra metà della pagina 3 e metà della pagina 4 dall'ultima volta che sono stato lì perché ci sono 1,5 pagine completamente nuove nell'elenco.
pdr

2
-1 Dato che non sono molto d'accordo anche con questo. Non sono nemmeno sicuro da dove cominciare a spiegare il perché.
Craige,

@Craige: Bene, ok allora. Non sono certamente in grado di sollevare molte argomentazioni al riguardo.
pdr
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.