rilevante


  rilevante > comp.lang.* > comp.lang.visual-basic

 #1  
19.02.2006, 10:47
Myno
Ciao ragazzi,
ho una applicazione scritta in VB6 che, per motivi che non sto a
spiegarvi, deve eseguire numerose query su un database con parecchie
tabelle.
Queste query (semplificando il discorso) sono tutte del tipo "Prendi il
campo X dalla tabella Y con record ID=Z", ovvero sono tutte query
eseguite su tabelle separate e che restituiscono un solo valore (ovvero
un singolo campo) di uno specifico record.

La domanda e' la seguente: qual'e' secondo la vostra esperienza la
combinazione DAO/ADO + database piu' performante in questi casi?

DAO + MySQL
DAO + MSDE
DAO + MS SQL
ADO + MS SQL
ADO + MySQL
........ ???

Premetto che attualmente viene utilizzato DAO 3.6 + Database Access
(Jet 4.0) ma ho necessita', per ovvi motivi, di passare ad un database
piu' robusto (MS SQL, MySQL, Firebird, Oracle, Pervasive o quant'altro
possiate suggerirmi).
L'applicazione viene utilizzata normalmente da una decina di utenti.

Secondo la vostra esperienza qual'e' la soluzione migliore?
 #2  
19.02.2006, 10:59
hal1961
On 2006-02-19, Myno <fabio> wrote:

> ho una applicazione scritta in VB6 che, per motivi che non sto a
> spiegarvi, deve eseguire numerose query su un database con parecchie
> tabelle.
> Queste query (semplificando il discorso) sono tutte del tipo "Prendi il
> campo X dalla tabella Y con record ID=Z", ovvero sono tutte query
> eseguite su tabelle separate e che restituiscono un solo valore (ovvero
> un singolo campo) di uno specifico record.

[cut]
> Premetto che attualmente viene utilizzato DAO 3.6 + Database Access
> (Jet 4.0)


il database e` in rete?

> ma ho necessita', per ovvi motivi, di passare ad un database
> piu' robusto (MS SQL, MySQL, Firebird, Oracle, Pervasive o quant'altro
> possiate suggerirmi).


il costo delle licenze e` ininfluente? voglio dire, si possono
sfruttare istanze gia` esistenti?

> L'applicazione viene utilizzata normalmente da una decina di utenti.


allora e` in rete

> Secondo la vostra esperienza qual'e' la soluzione migliore?


un qualsiasi database client server (quindi NO access), con le tabelle
ben indicizzate in base alle query che devi fare.
valuta anche l' opportunita` di spostare il codice SQL piu` pesante su
stored procedures: ad esempio, se adesso devi fare dieci lookup prima
di ottenere un certo risultato definitivo, mettili tutti in una stored
procedure che ti restituisca solo l'ultimo valore.
 #3  
19.02.2006, 11:05
Myno
Ciao Hal,
grazie dei suggerimenti.
Per quanto riguarda il discorso degli indici, questi gia' ci sono, in
quanto per questo specifico problema praticamente i JOIN sono
inesistenti.
Stiamo parlando di query tutte del tipo:

SELECT NomeCampo FROM NomeTabella WHERE IdChiavePrimaria=N

La mia domanda era su qual'e' secondo te, a livello di performance, la
combinazione migliore (indipendentemente dal costo delle licenze del DB
server, ecc.)
 #4  
19.02.2006, 11:13
Myno
Scusa. Ovviamente l'indice su IdChiavePrimaria e' presente
 #5  
19.02.2006, 11:32
hal1961
On 2006-02-19, Myno <fabio> wrote:

> Per quanto riguarda il discorso degli indici, questi gia' ci sono, in
> quanto per questo specifico problema praticamente i JOIN sono
> inesistenti.
> Stiamo parlando di query tutte del tipo:
>
> SELECT NomeCampo FROM NomeTabella WHERE IdChiavePrimaria=N


> Ovviamente l'indice su IdChiavePrimaria e' presente


> La mia domanda era su qual'e' secondo te, a livello di performance, la
> combinazione migliore (indipendentemente dal costo delle licenze del DB
> server, ecc.)


bisogna anche considerare l'hardware su cui deve girare il database,
chi e come deve gestire la manutenzione del sistema (macchine e db)
e del software.
le dimensioni del database possono essere un aspetto da considerare:
con oracle mi sono sempre trovato bene con database grandi, ma c'era
anche un signor hardware sotto.
anche sql server puo` fare la sua bella figura, pero` ha il difetto
di girare solo su windows e tende ad integrarsi troppo nel S.O..
in compenso, visual basic lavora bene con sql server ed un eventuale
upgrade da access e` facilitato da apposita procedura guidata.
va rivisto naturalmente il codice del client che, se pensato all'
origine per access, avra` probabilmente delle Seek e delle Find che
sono da buttare nel cesso.
non ho mai lavorato seriamente con mysql, mentre ho fatto esperienze
positive con sql anywhere di sybase (non so se esista ancora).

diciamo che, se ti trovi bene con gli ambienti microsoft, potresti
avallare l'impiego di sql server.
 #6  
19.02.2006, 12:09
Andrea Montanari
salve,
Myno wrote:
[..]
> ADO + MySQL
> ....... ???
>
> Premetto che attualmente viene utilizzato DAO 3.6 + Database Access
> (Jet 4.0) ma ho necessita', per ovvi motivi, di passare ad un database
> piu' robusto (MS SQL, MySQL, Firebird, Oracle, Pervasive o quant'altro
> possiate suggerirmi).
> L'applicazione viene utilizzata normalmente da una decina di utenti.
>
> Secondo la vostra esperienza qual'e' la soluzione migliore?


non ho esperienza relativamente a Firebird, Oracle e MySql, solo piccole
esperienze PostgreSQL oltre a SQL Server, quindi la mia risposta potrebbe
sicuramente essere "di parte"...
sconsiglierei comunque DAO in quanto specificatamente calibrato e disegnato
su JET, e chiaramente consiglierei almeno ADO, se proprio vuoi rimanere in
ambito COM...
relativamente a SQL Server/MSDE non dovresti avere problematiche particolari
anche se, in determinati ambienti, il passaggio da JET a veri server di
motori relazionali puo' comportare delle "penalizzazioni" in termini di
performance, dipendenti sicuramente dal diverso tipo di ambito..
JET e' veramente un fulmine in ambito locale con tabelle poco popolate, ma
le sue prestazioni tendono a decadere in ambito multiutente, specialmente
per database corposi, e talvolta si incorre anche in problematiche di
sicurezza fisica del file di database... diversamente i motori comunque
riportati offrono una sicurezza e stabilita' non paragonabile a JET stesso,
malgrado la possibile penalizzazione in alcuni ambiti di performance..
il loro lavoro chiaramento meglio lo svolgono utilizzando appropriatamente
le "regole" relative alle interrogazioni, quindi filtri di where appropriati
onde recuperare il numero minimo di righe da manipolare e non mostruose
SELECT * FROM incondizionate...
saluti
 #7  
20.02.2006, 08:00
Myno
Grazie a tutti per i suggerimenti
Faro' un po' di prove
 #8  
20.02.2006, 08:10
Albe V°
Myno ha pensato forte :
> Ciao ragazzi,
> ho una applicazione scritta in VB6 che, per motivi che non sto a
> spiegarvi, deve eseguire numerose query su un database con parecchie
> tabelle.
> Queste query (semplificando il discorso) sono tutte del tipo "Prendi il
> campo X dalla tabella Y con record ID=Z", ovvero sono tutte query
> eseguite su tabelle separate e che restituiscono un solo valore (ovvero
> un singolo campo) di uno specifico record.


Quanto a performance, qualunque strumento, eccetto ovviamente Access
che è file based, se ben indicizzato e montato su macchine decenti, ti
fornirà prestazioni elevatissime.
Quanto a librerie, sicuramente ADO+OleDb è la scelta migliore, visto
che DAO va bene per Access e poco altro, e ODBC comunque è una
complicazione ed un rallentamento inutile.
Fra gli strumenti dbms-server, oltre alle performance che, come dicevo,
fino ad un certo carico si possono considerare equiparabili (e se oggi
vai su Access, sei ad almeno un ordine di grandezza 100 dal livello in
cui potrai percepire lievi differenze), devi considerare anche la
disponibilità di strumenti di supporto come manualistica e gruppi di
discussione.
In questo, Oracle e Ms-Sql/MSDE sono imbattibili. Gli altri sono un po'
assenti in rete, e se ti inchiodi su qualcosa ti tocca ricorrere
all'assistenza ufficiale ($$$).
Non ultimo, considera che di quelli che citi, MSDE è l'unico gratuito
(e non è poco...).

Ciao

Alberto
Discussioni simili
Performance: database multipli o partizionamento?

Posto anche di qua la richiesta fatta su ficd.mysql Supponendo di dover gestire un database dove alcune tabelle contengono decine di milioni di record, per non avere un...

Performance database SQL2000

Ho un database SQL 2000 di circa 15 GB e vorrei capire come migliorare le sue prestazioni. Non ho una query particolare su cui basarmi e non so se e come posso utilizzare il...

Database Mirroring Performance

Ciao, qualcuno di voi sa darmi delle considerazioni pratiche sull'abbassamento di performance implementando il database mirroring in modalità Safety Full ? So come funziona a...

Database collegati e performance .. ?

Scusate la domanda (forse) scema ma volevo capire se il fatto di avere collegato sul mio enterprise manager alcuni database remoti (per fare attivita' di manutenzione varie)...


Tutti gli orari sono GMT. Attualmente sono le 07:44. | Privacy Policy