La mia squadra sta attualmente affrontando un problema che non sappiamo come affrontare.
Alcuni dettagli tecnici: utilizziamo Java 8, Hibernate, Spring, MySQL e AngularJS per il front-end.
Dobbiamo impaginare su un insieme combinato di dati locali e remoti. L'approccio che stiamo prendendo è il seguente:
- Esamina il nostro database locale poiché supportiamo la paginazione con Hibernate e recuperiamo i record impaginati.
- Prepara i record precedenti per richiamare un servizio REST per recuperare dettagli extra.
- Unisci tutti i dettagli e rendi i dati in una pagina web.
Questo approccio funziona bene quando stiamo facendo una ricerca per recuperare semplicemente più dettagli dal servizio remoto nei nostri dati locali.
Il problema sta nell'impossibilità di utilizzare i nostri dati locali come riferimento per la paginazione.
Esempio:
Diciamo che stiamo cercando tutte le auto SuperBrand in magazzino che usano il latte come carburante e hanno le ruote quadrate. Nel nostro DB locale disponiamo di auto da 10k da cui 2k sono SuperBrand. Quindi abbiamo questo volume iniziale di record 2k di dati locali che Hibernate riesce a impaginare in 20 pagine di 100 record ciascuna. Tuttavia, il cliente desidera solo i modelli di latte e ruote quadrate. In questo caso, abbiamo bisogno di invocare una terza parte che possa dirci di quelle 2k auto che soddisfano i criteri di ricerca. Il fatto è che non tutte le macchine funzionano con il latte e hanno ruote quadrate che potrebbero interrompere l'impaginazione. Inoltre, la terza parte non supporta la paginazione.
Per questo motivo, abbiamo scartato la possibilità di inviare a terzi i dati per pagina, cioè inviare i 100 record della pagina 1 e verificare con la terza parte, e quando il cliente seleziona la pagina 2, inviare il corrispondente 100 record e ricontrollare con la terza parte. Questo non è l'ideale perché dai 100 record della pagina 1 forse solo 10 seguono i criteri. Di conseguenza, mostreremmo solo 10 record a pagina 1. Forse i 100 record della pagina 2 soddisfano i criteri e potrebbero essere effettivamente visualizzati. Tuttavia, l'impaginazione è già interrotta dalla pagina 1.
L'altra possibilità è quella di inviare l'intero record 2k, invocare la terza parte, ridurre il volume di dati al numero rilevante di record che soddisfano i criteri di ricerca e creare un meccanismo di paginazione nel server per gestire e conservare i dati. Anche se concettualmente questo funzionerebbe, sono ancora preoccupato per le prestazioni di enormi volumi di dati.
Domande sull'argomento:
- L'opzione precedente è un approccio valido?
- Esiste la possibilità di trasmettere i dati anche con un servizio remoto, invece di eseguire l'impaginazione (tenere presente che le ricerche vengono avviate in AngularJS tramite le chiamate REST ai nostri server)?
- Qualcuno potrebbe raccomandare un altro approccio?