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.
|