Newsgroup: it.comp.www.php
Titolo: dubbi su prestazioni php e db access

ciao,
sto provando a utilizzare un db access con php, in particolare mi serve di
convertirlo periodicamente in un corrispondente db mysql.. che poi uso per
le pagine web ;-D
allora ho provato odbc, ma lo trovo lento, in particolare dovendo fare un
"table scan".. poi ho letto che l'OLEDB è un metodo più veloce, su windows,
rispetto ad ODBC, e pure rispetto a COM
(
http://php.weblogs.com/php_asp_7_reasons
) così ho fatto un piccolo script
per confrontare i due metodi (ODBC E OLEDB) sul mio caso reale, un db sullo
stesso server su cui è installato sia php che apache, un P3 1GHz x232 IBM,
con 512MB RAM e RAID5 su dischi SCSI UW, 3x18Gb, in una LAN a 100Mbit.
Apache 1.3.28 / PHP 4.3.3 / NT4sp6a.
la tabella da cui faccio la lettura e' composta da 72 campi e circa 9000
record a me sembra che, per quanto lento, ODBC sia MOLTO piu' veloce di
ADADB/OLEDB...
o sbaglio qualcosa? per soli 300 record, 19 secondi!! odbc 1,25 comunque
troppi, perche' per tutti i record i tempi salgono in maniera biblica..
ci sono metodi più veloci, impostazioni di php o altro da configurare per
raggiungere tempi decenti? altrimenti dovrò affidarmi ad un batch
notturno... ma non vorrei.
--
M@®©o
posto qui i risultati, poi lo script
----------------------------------
 SELECT TOP 100 * FROM anagrafica_generale
ODBC - connessione: 0
ODBC - query: 0.01
ODBC - fetchrow all: 0.24
ADODB/OLEDB - connessione: 0
ADODB/OLEDB - query: 0.15
ADODB/OLEDB - fetchrow all: 2.69
SELECT TOP 200 * FROM anagrafica_generale
ODBC - connessione: 0
ODBC - query: 0.01
ODBC - fetchrow all: 0.47
ADODB/OLEDB - connessione: 0.01
ADODB/OLEDB - query: 0.15
ADODB/OLEDB - fetchrow all: 8.18
SELECT TOP 300 * FROM anagrafica_generale
ODBC - connessione: 0
ODBC - query: 0.01
ODBC - fetchrow all: 1.25
ADODB/OLEDB - connessione: 0.01
ADODB/OLEDB - query: 0.15
ADODB/OLEDB - fetchrow all: 19.13
----------------------------------
<?php
 function getmicrotime(){
        list($usec, $sec) = explode(" ",microtime());
        return ((float)$usec + (float)$sec);
    }
 function report(){
  global $modo, $operazione, $st, $et;
  print "$modo - $operazione: ".round($et-$st, 2)."<br>";
 }
 function compara($query){
  global $modo, $operazione, $st, $et;
  print $query."<br>";
  //ODBC
  $modo="ODBC";
  $operazione="connessione";
  $st=getmicrotime();
   $conn=odbc_connect("apiform", "", "");
   //"apiform" -> d:/htdocs/apiform/db/unicadat.mdb
  $et=getmicrotime();
  report();
  $operazione="query";
  $st=getmicrotime();
   $rs=odbc_exec($conn, $query);
  $et=getmicrotime();
  report();
  $operazione="fetchrow all";
  $st=getmicrotime();
   $fn=odbc_num_fields($rs);
   while(odbc_fetch_row($rs)){
    $r++;
    for($f = 1; $f <= $fn; $f++){
     $array[$r][$f]=odbc_result($rs, $f);
    } // for
   } // while
  $et=getmicrotime();
  report();
  odbc_close($conn);
  //ADODB
  $modo="ADODB/OLEDB";
  $operazione="connessione";
  $st=getmicrotime();
   $conn = new COM("ADODB.Connection");
   $conn->Open("Provider=Microsoft.Jet.OLEDB.4.0; Data
Source=d:/htdocs/apiform/db/unicadat.mdb");
  $et=getmicrotime();
  report();
  $operazione="query";
  $st=getmicrotime();
   $rs = $conn->Execute($query);
  $et=getmicrotime();
  report();
  $operazione="fetchrow all";
  $st=getmicrotime();
   $fn=$rs->Fields->Count;
   while(!$rs->EOF){
    $r++;
    for($f = 0; $f < $fn; $f++){
     $array[$r][$f]=$rs->Fields[$f];
    } // for
    $rs->MoveNext();
   }
  $et=getmicrotime();
  report();
  $conn->Close();
  print "<br>";
 }
 set_time_limit(240);
 $query="SELECT TOP 100 * FROM anagrafica_generale";
 compara($query);
 $query="SELECT TOP 200 * FROM anagrafica_generale";
 compara($query);
 $query="SELECT TOP 300 * FROM anagrafica_generale";
 compara($query);
?>

 le pagine web ;-D
Se puoi farlo non in automatico, prova DBTools.
Ti converte un db access in mysql.
Ciao
Marco

 ha scritto nel messaggio
news:bn34hh$lmh$3...@news2.isdnet.net...


 ha una progressione esponenziale..
Ma scusa, visto che lo converti in mysql per uso web, perchč non lo lasci
cosě?
"Perchč chi usa il db, sa usare solo access" mi risponderai.  :-)
Ebbene impara ad usare un altro sistema.  :-D
Ciao
Marco

 Ebbene impara ad usare un altro sistema.  :-D
eh.. non sono io che lo devo usare, ma una ventina di altre persone..
e io non sono il "db manager".. fosse per me.. :-D
ma io vorrei solo capire se e' un limite dell'odbc, o se sono io che sbaglio
qcosa,
e anche come mai OLEDB, che è "pubblicizzato" come miglire dell'ODBC in
realtà a me
vada incredibilmente peggio.. ?
ciao,
--
M@®©o

 dell'ODBC in realtà a me vada incredibilmente peggio.. ?
Questo non lo so. Mai usato.
Ciao
Marco