ovviamente sono d'accordo con @Martijn perché doc dice così, ma se si sono concentrati sui sistemi Unix-like, allora si può fare uso di memoria condivisa:
Se si crea il file nella cartella /dev/shm
, tutti i file creano ci sono mappati direttamente alla RAM, quindi puoi usare per accedere allo stesso database da due processi diversi.
#/bin/bash
rm -f /dev/shm/test.db
time bash -c $'
FILE=/dev/shm/test.db
sqlite3 $FILE "create table if not exists tab(id int);"
sqlite3 $FILE "insert into tab values (1),(2)"
for i in 1 2 3 4; do sqlite3 $FILE "INSERT INTO tab (id) select (a.id+b.id+c.id)*abs(random()%1e7) from tab a, tab b, tab c limit 5e5"; done; #inserts at most 2'000'000 records to db.
sqlite3 $FILE "select count(*) from tab;"'
ci vuole così tanto tempo:
FILE=/dev/shm/test.db
real 0m0.927s
user 0m0.834s
sys 0m0.092s
per almeno 2 milioni di dischi, facendo lo stesso su HDD prende (questo è lo stesso comando, ma FILE=/tmp/test.db
):
FILE=/tmp/test.db
real 0m2.309s
user 0m0.871s
sys 0m0.138s
quindi in pratica questo ti consente di accedere agli stessi database da processi diversi (senza perdere velocità R/W):
Ecco demo che dimostra questo ciò di cui sto parlando:
xterm -hold -e 'sqlite3 /dev/shm/testbin "create table tab(id int); insert into tab values (42),(1337);"' &
xterm -hold -e 'sqlite3 /dev/shm/testbin "insert into tab values (43),(1338); select * from tab;"' &
;
Ogni processo che si connette a ': Memoria:' crea un proprio, unico nel suo genere, banca dati privata, invisibile a tutti gli altri processi. – zwol