Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Database disk image is malformed from many concurrent writes

Tags:

python

sqlite

I'm running many (18k) batch jobs on a cluster with a Lustre filesystem. The jobs are submitted at the same time, each takes about 3 seconds, and they write the result using the sqlite3 python module. The write part of the code is very simple:

with sqlite3.connect(name, timeout=900) as conn: 
    conn.execute(
        "insert into someTable values (?, ?)", (value1, value2))   

but a lot of the jobs will throw an exception:

sqlite3.DatabaseError: database disk image is malformed

and sometimes

sqlite3.OperationalError: unable to open database file

I'm guessing this has something to do with lots of jobs putting a lock on the file when they write to it, but my impression was that sqlite3 should know to wait patiently for the file to be free. Is my error likely a result of too many concurrent writes? How can I fix it?

like image 782
Shep Avatar asked Aug 14 '13 17:08

Shep


1 Answers

SQLite does not support storage on a distributed file system. Concurrent access required locking and that is not transferred across such a system.

You'll have to move to a database that supports a networked model instead, such as MySQL or PostgreSQL.

like image 167
Martijn Pieters Avatar answered Sep 30 '22 13:09

Martijn Pieters