PicoSQL is the first Italian Open Source relational database. To download the software does not require any registration, but we are grateful to all those who would have us know that they have downloaded the product, which impressions have had and so on.
This version fixes a serious problem and calls closesocket authentication standard that was not called in 2.0.3a. 2.0.4a The release fixes a problem on Windows version picoserv .
Making comparisons between different databases is a very delicate task. There are many factors to consider, starting from the hardware configuration to get the query types to choose from. For this reason we do not publish comparisons, but we give only some indications and we provide the source for those wishing to make direct comparisons. If anyone wants to make comparisons with other databases, we will be happy to publish the results.
The first aspect that we evaluated about the consistency of performance with increasing competition for access. The consistency of performance of a database is an important factor which helps to ensure that the programs we are developing today, typically with little data available and accessed a few people, work tomorrow when the database fills up and access grow.
To test the competition we used the Java multithreading. The program JavaConcBench.java creates a table with three attributes, two numbers and one string. 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. Two unique indexes are created on the first attribute and the attribute number string. You then enter the first line with the values "(0, 0, ‘First record’)." At this point, the threads are generated, whose number is specified on the command line, each of which writes a line uniquely identified by the name that Java allocates to each thread. then starts a loop where it reads the first line of DB with a "select … for update" to lock ( the "SuspensiveLock" must be equal to YES), is incremented by one and the first attribute is rewritten the line. 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. Without this feature line is rewritten by putting the thread in the first attribute just read the number increased by one while the second numeric attribute counts the number of times that this operation is performed. All threads then access the same line, simulating a condition of increased competition. The fairness of competition is ensured by the fact that the first attribute of the table, which is linked to a unique index appears not to be duplicated in no time. The program ends after 10,000 operations performed by all threads. By increasing the number of thread so the number of transactions does not change and therefore the best result is when the program takes the same time whether they are run with one thread, both are run with any number of threads.
Nelle prove fatte sul computer dove abbiamo eseguito il test (Linux Pentium4 1.9Ghz) usando picoSQL il programma impiega 57 secondi lanciato con 1 thread. In tests done on the computer where we have tested (Linux Pentium4 1.9GHz) using PicoSQL launched the program takes 57 seconds with 1 thread. Il tempo sale a 1 minuto e 8 secondi se i thread contemporanei sono 16, per arrivare a 1 minuto e 19 secondi quando viene lanciato con 128 thread. Lo stesso programma con database Oracle 8.1.7.0.1, installato sullo stesso computer senza particolari configurazioni, ha impiegato 1 minuto e 12 secondi con 1 thread e ben 3 minuti con 16 thread. The weather up to 1 minute and 8 seconds if the threads are 16 contemporary, to arrive at 1 minute 19 seconds when starting with 128 thread. The same program with Oracle 8.1.7.0.1 database installed on the same computer without special configurations , took 1 minute and 12 seconds with 1 thread, well 3 minutes with 16 threads. Con 128 thread non abbiamo fatto il test percé avremmo dovuto riconfigurare il computer. Abbiamo tentato di effettuare il test con altri DB, e precisamente MS-SQL e mySql, ma in entrambi i casi non siamo riusciti a far andare il programma con più di un thread, probabilmente a causa delle nostre limitate conoscenze su quei sistemi. With 128 threads, we did the test because we had to reconfigure the computer. We tried to test other DB, namely MS-SQL and mysql, but in both cases we failed to get the program with more than one thread, probably because of our limited knowledge about those systems