![]()  | 
  picoSQL benchmark | 
  ![]() Corso Italia, 178 - 56125 Pisa phone/fax +39 050 46380 e-mail picosoft@picosoft.it  | 
 
   ![]() 
   Fare delle comparazioni tra database diversi è un compito molto
   delicato. Ci sono moltissimi fattori da prendere in considerazione, partendo
   dalle configurazioni hardware per arrivare ai tipi di query da scegliere.
   Per questo motivo non pubblichiamo confronti, ma diamo soltanto alcune
   indicazioni e mettiamo a disposizione dei sorgenti per chi desidera fare
   confronti diretti. Se poi qualcuno desidera fare confronti con altri
   database, saremo felici di pubblicare i risultati. Concorrenza 
   Per fare delle prove di concorrenza abbiamo usato il multithreading di Java.
   Il programma JavaConcBench.java crea una
   tabella con tre attributi, due numerici e uno stringa. Due indici univoci
   vengono creati sul primo attributo numerico e sull'attributo stringa.
   Viene poi inserita la prima riga con i valori "(0, 0, 'First record')".
   A questo punto vengono generati dei thread, il cui numero viene specificato
   sulla linea di comando, ciascuno dei quali scrive una riga
   identificata univocamente dal nome che Java assegna a ciascun thread.
   Inizia quindi un ciclo in cui viene letta la prima riga del DB con una
   "select ... for update" in modo da bloccarla (l'opzione
   "SuspensiveLock" deve essere uguale a YES), viene incrementato di uno il
   primo attributo e viene riscritta la riga. Fatto questo viene riscritta
   la riga caratteristica del thread mettendo nel primo attributo il numero
   appena letto incrementato di uno mentre il secondo attributo numerico
   conta il numero di volte che questa operazione viene eseguita.
   Tutti i thread accedono quindi alla stessa riga, simulando così
   una condizione di elevata concorrenza.
   La correttezza della concorrenza viene garantita dal fatto che il primo
   attributo della tabella, cui è legato un indice univoco, non appaia
   duplicato in alcun momento.
   Il programma termina dopo 10'000 operazioni eseguite da tutti i thread.
   Aumentando il numero di thread quindi il numero di operazioni non cambia
   e quindi il risultato ottimale si ha quando il programma impiega lo stesso
   tempo sia che venga lanciato con un thread, sia venga lanciato con un
   numero qualsiasi di thread.
     |