许多并发写入导致数据库磁盘映像格式错误

She*_*hep 5 python sqlite

我正在使用 Lustre 文件系统的集群上运行许多(18k)批处理作业。作业同时提交,每个大约需要3秒,它们使用sqlite3python模块写入结果。代码的写部分很简单:

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

但是很多工作都会抛出异常:

sqlite3.DatabaseError: database disk image is malformed
Run Code Online (Sandbox Code Playgroud)

而有时

sqlite3.OperationalError: unable to open database file
Run Code Online (Sandbox Code Playgroud)

我猜这与许多作业在写入文件时锁定文件有关,但我的印象是sqlite3应该知道耐心等待文件空闲。我的错误可能是由于并发写入过多造成的吗?我该如何解决?

Mar*_*ers 5

SQLite的确实支持分布式文件系统的存储。并发访问需要锁定,并且不会跨此类系统传输。

您必须转而使用支持网络模型的数据库,例如 MySQL 或 PostgreSQL。