Newsgroup: it.comp.java
Titolo: ResultSet enormi

Questo e' un problema classico ma che io ancora non ho risolto
decentemente, una query restituisce un resultset enorme.. diciamo
100.000 record, normalmente si copia il contenuto del resultset in una
collection di bean, si mette la collection nella sessione e si usa una
taglib per la paginazione... ovviamente quando il ResultSet e' troppo
grande non e' consigliabile un approccio simile, io pero' vorrei
continuare ad utilizzare la mia taglib, senza creare ex novo del
codice che si interfaccia direttamente al db e magari fa una query a
ogni link ">>" o soluzioni equivalenti. Voi come avete risolto? E se
creassi una collection virtuale capace di cachare alcuni record ma
simulare il possesso di tutti e in caso di richiesta di record
mancanti (miss) provveda automaticamente ad interogare il db (un po'
fa una memoria virtuale)? In questo modo la collection potrebbe essere
messa nella sessione senza consumare risorse eccessive, nessuno ha mai
pensato ad una soluzione simile ? 
 

 Voi come avete risolto?
Secondo me, qualunque query che ritorna piu' di 100 record e'
fondamentalmente sbagliata. Nessuno, nemmeno il piu' brain-dead dei
(l)user, si metterebbe a guardare 50 pagine di dati.
Dai un messaggio di errore ed aggiungi delle funzioni di ricerca
migliori.
Davide

 pensato ad una soluzione simile ? 
Si': l'idea e' simile alle tecniche di paging - prelevi gruppi di rows un 
po' alla volta, quindi dai un limite superiore alla memoria usata; ma 
fornisci un front-end software che gestisce i fault automaticamente. 
Tuttavia ci sono dettagli. In genere, non vuoi mantenere aperta una risorsa 
di database a lungo: un ResultSet aperto (a seconda della query) puo' 
provocare lock di rows e degrado di performance di accessi concorrenti. Una 
tecnica elegante e' quella di mantenere la query originale, aggiunger 
condizioni per prelevarne solo una parte, mantenere un PreparedStatement e 
rieseguire il tutto ogni volta. Purtroppo, questa puo' risultare a sua 
volta un po' lenta - a seconda di quanto il database preserva del piano di 
esecuzione di una query tra una esecuzione e l'altra. 
Addirittura in alcuni casi, a seconda del profilo d'uso, la soluzione piu' 
semplice e' quella di lasciare al sistema operativo la paginazione vera e 
propria della memoria - in quasi tutti i s/o moderni la "memoria 
disponibile" e' in effetti limitata solo dallo spazio su core+disco. Il 
problema con quest'approccio in genere e' nell'implementazione dei widget 
(ad esempio, il fatto che con win32 ogni widget sia una finestra a se' 
stante con la propria message pump, mentre ad esempio in X e' 
responsabilita' della finestra contenitrice genera comportamenti 
notevolmente diversi, nel contesto di cui parliamo)
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

Davide

 tutte
Capita anche di dover fare query con risultati lunghissimi per l'estrazione
di dati da elaborare con funzioni non realizzabili con stored procedure (o
tecniche similari).

esecuzione di una query tra una esecuzione e l'altra. 
esatto, con i cursori.. sicuramente sarebbe una soluzione universale e
pulita, l'unica cosa che mi spaventa a questo punto e' una (sempre)
possibile megaquery da 2.000.000 di record ;D 
 
E' strano che qualcuno non abbia pensato ad estendere la collection in
questo modo, IMHO un oggetto del genere potrebbe rivelarsi utile in
piu' di un'occasione .  

 30,40 risultati (o quelli precedenti)
Tra l'altro, non c'era anche il CachedRowSet? (un early access di sun, 
dovrebbe essere disponibile in rete). Pero' non l'ho mai usato.


dovrebbe essere disponibile in rete). Pero' non l'ho mai usato.
l'interfaccia Rowset e' nel jdk1.4, l'implementazione si trova in
genere nel driver jdbc ma ne esistono anche di open source, il
CachedRowset semplifica solo l'accesso al ResultSet wrappandolo in un
bean ma alla fine le row devono essere presenti interamente in memoria
quindi non va bene per quel che devo fare :( 
Nemmeno io l'ho mai usato e nemmeno mi piace granche' 
 

 quindi non va bene per quel che devo fare
che taglia la testa al toro :)


Visto che tu lo sai usare bene mi invio un esempio o mi scrivi qualcosa di
esplicativo di come usare il tag display?? non riesco a farmi creare la
tabella , Ringrazio tutti a priori
java user wrote:

***************************************
messaggio inviato tramite HostSearch.it
---------------------------------------
---> 
http://www.hostsearch.it/newsgroup
***************************************


http://edhill.its.uiowa.edu/display-examples-0.8/
nella distribuzione sono inclusi i sorgenti degli esempi, l'unica
difficolta' che potresti trovare e' nell'utilizzo del pattern
decorator per i campi ma una volta appreso e' *GRANDIOSO*, cmq
ringraziatemi perche' sono stato io ad insistere riguardo
l'internazionalizzazione, la versione precedente aveva le scritte in
inglese embedded :) 
 se hai dei problemi specifici fammi sapere 

Ti ringrazio tanto e ti dico subito dov'e' problema cosi se mi puoi aiutare
risolvo , ecco il problema:
io gli passo una lista contenente due vettori cosa devo mettere per farli
fare le
colonne al tag tabella . Scrivo il codice :
<% request.setAttribute("test",lista) ; %>
<display:table width="75%" name="test">
<display:column property="che ci devo mettere" title="miacolonna" />
</display:table>
Se pure puoi farmi un esempio stupido partendo dal riempire una lista o
altro alla realizzazione della tabella con la paginazione delle pagine ti
sarei gratissimo.
grazie
FABIO
"java user" <noe...@becauseof.spam> ha scritto nel messaggio
news:ebv3ou80hidseo9j1...@4ax.com...


 
http://edhill.its.uiowa.edu/display-examples-0.8/


***************************************


 
http://edhill.its.uiowa.edu/display-examples-0.8/


Si ho fatto questo partendo dagli esempi pero non mi funziona mi spieghi
cosa dovrei metterci nel property?
Grazie mille
