Caricamento di tutte le voci del DB ogni volta e caricamento solo di nuove (e come identificarle)

1

Ho una pagina JSF (Primefaces) con un datatable che contiene voci da un Database. Le voci Thoes rappresentano le transazioni create dagli utenti.

Ogni volta che viene caricata questa pagina, faccio questo:

  • Cancella la tabella
  • Chiama un servizio che mi fornisce tutte le voci
  • Riempi di nuovo con queste voci

Dato che il bean contenente le voci potrebbe essere SessionScoped, mi chiedo se sarebbe meglio caricare solo nuove voci ogni volta.

Ma poi ho pensato che un "Seleziona x, y, z dalla tabella" è probabilmente molto veloce in ogni caso, e che non so ancora come vorrei sapere quali voci sono nuove.

Sto cercando un buon modo per caricare quelli nuovi. Finora, l'idea migliore che ho avuto è di caricare solo quelli che sono stati creati dopo il più recente nel mio datatable.

Qualche altro suggerimento? Non ho trovato molte "buone pratiche" per i dataTable contenenti voci di DB.

    
posta Tim 14.09.2016 - 17:20
fonte

1 risposta

1

Per prima cosa, assicurati che il tuo programma abbia davvero bisogno di un'ottimizzazione. Se il tuo programma è semplice e veloce sufficiente per tutti i casi di utilizzo correnti, non complicare le cose cercando di aggiungere un meccanismo di caricamento ottimizzato per motivi di velocità che nessuno richiede.

Ma supponiamo che i tuoi utenti si lamentino della lentezza del tuo programma quando caricano i dati in palio, quindi la prossima cosa è misurare la velocità corrente e assicurarti che le prestazioni siano realmente in relazione con il numero di record restituiti dalla query. Per molte applicazioni db che ho visto, questo non era il caso, spesso il numero di query (e non il numero di record restituiti) è ciò che domina la velocità del processo di caricamento.

Quindi se sei al 100% a causare il problema, per l'ottimizzazione che hai in mente è necessario assicurarsi che i record già caricati non vengano modificati tra due operazioni di caricamento della pagina, quindi caricare solo i record più recenti e la fusione con i dati già caricati porterà a un risultato valido che riflette effettivamente ciò che è nel database.

Quando sai per certo che è il caso, hai bisogno di una colonna nella tua tabella che ti permetta di distinguere i record "più vecchi" e "più recenti". Questo può essere in genere un codice ID autoincrementato o un valore data / ora che indica il tempo di creazione del record. Senza una colonna di questo tipo, non avrai molte possibilità di fare questo tipo di ottimizzazione. Se esiste una colonna di questo tipo, calcola il valore ID massimo o il valore data / ora dei dati già caricati e aggiungi alla tua query una condizione "WHERE" del modulo ".. WHERE id > maxID" .

Infine, non dimenticare di misurare di nuovo per verificare che l'ottimizzazione abbia realmente aumentato le prestazioni. Se lo fa, mantienilo, se no, fai un favore a te stesso e butta via la soluzione ottimizzata sostituendola con il codice originale non ottimizzato (ma molto probabilmente più semplice, più mantenibile).

    
risposta data 15.09.2016 - 13:29
fonte

Leggi altre domande sui tag