Newsgroup: it.comp.java
Titolo: Meglio tante connection o tanti statement?

Salve a tutti, 
   sono uno sviluppatore java ed uso i driver Oracle thin. Dato che devo
accedere al server oracle con una applicazione client/server multithread
mi chiedo: 
è meglio aprire tante connection e ricavare da ognuna di esse (tramite
connection.getStatement) gli statement necessari ad effettuare le query
o aprire meno connection e da ognuna ricavare più statement?
Un esempio pratico: ho 10 thread che devono effettuare una query. Che
differenza c'è fra:
1) aprire 10 connection e da ognuna 1 statement;
2) aprire 2 connection e da ognuna 5 statement;
esiste una differenza in termini di prestazioni/sicurezza ? E qual'è il
numero massimo di statement che possono essere ricavati da una
connection ?
Ringrazio anticipatamente chiunque vorra' chiarire i miei dubbi.
-- 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mario Libraro
Responsabile progettazione Web
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Fulltrading S.p.A.
amm.:  50121 Firenze - Viale Matteotti, 9
sede:  00153 Roma - Via Rosazza, 58
cell.: +39 338 9753 962
       +39 347 5205 752
tel.:  +39 065 8332 494
fax:   +39 065 8334 789
email: 
m.li...@fulltrading.it
 
m.li...@tiresia.it
web:   
www.fulltrading.it
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 2) aprire 2 connection e da ognuna 5 statement;
Una connessione può gestire più statement (non mi ricordo quanti di
preciso); e siccome aprire una connessione non è che sia la cosa più leggera
del mondo specie per il povero server, personalmente suggerirei di limitare
il numero di connessioni massimizzando il numero di statement per
connessione.
Poi, sono aperto a qualsiasi dibattito.
Ciao,
 Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------

connection ?
Questa situazione è da valutare. Ricorda che se una connessione è in
uso da un statement per l'esecuzione di una query gli altri statement
rimangono in attesa finché la connessione non è disponibile.
Rimane a te valutare se una connessione può soddisfare il carico di
lavoro di 5 statement.
Non penso vi sia un limite massimo di statement per connessione.
Comunque la via migliore è quella di utilizzare il connection-pooling.
Ciao

 Poi, sono aperto a qualsiasi dibattito.
La scelta deve anche essere effettuata considerando che l'isolamento
transazionale avviene solo a livello di Connection.
Buon lavoro
Roberto
-- 
+---------------------------+
| Roberto Bagnoli           |
| 
robe...@comune.modena.it
 |
+---------------------------+

  Stefano
E' giusto si, ma non avevo riflettuto su quanto detto da Roberto
bagnoli, riguardo all'isolamento transazionale. Questo dovrà essere
valutato prima di scegliere un approccio o l'altro.
Riguardo alla risposta di corrado, io un pooler lo uso gia' ma volevo
creare un pooler di statement anzichè di connessioni. Si potrebbe farne
uno configurabile e parametrizzato su: numero di connection aperte
numero di statement aperti per ogni connection (che nel caso in cui si
debbano utilizzare le transazioni dovrebbe essere posto a 1).
Un'altra domanda riguardo al pooler. Io normalnete apro le connessioni e
le tengo aperte distribuendole ai thread che lo richiedono. Quando il
server si scoccia e chiude una connection per timeout io alla successiva
richiesta da parte di un thread la riapro. 
In altre parole non riesco a controllare lo stato delle connection se
non quando il mio metodo "getConnection" tenta di utilizzarla. Quindi mi
servirebbe una sorta di timer da usare o per verificare periodicamente
lo stato delle connection o per chiuderle dopo un certo tempo di
inattività (scelta sicuramente migliore). 
Io uso per ora il jdk 1.1 e qui non ho trovato nulla che assomigli ad un
timer per richiamare periodicamente un metodo.. come posso risolvere la
situazione ?
P.S. NOSPAM: per risposte private eliminare la x prima dell'indirizzo
-- 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mario Libraro
Responsabile progettazione Web
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Fulltrading S.p.A.
amm.:  50121 Firenze - Viale Matteotti, 9
sede:  00153 Roma - Via Rosazza, 58
cell.: +39 338 9753 962
       +39 347 5205 752
tel.:  +39 065 8332 494
fax:   +39 065 8334 789
email: 
xm.li...@fulltrading.it
 
xm.li...@tiresia.it
web:   
www.fulltrading.it
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 situazione ?
Un thread che controlla lo stato dopo una sleep()?
