数据库磁盘映像由于多个并发写入而损坏

5

我正在一个具有Lustre文件系统的集群上运行许多(18k)批处理作业。这些作业同时提交,每个作业大约需要3秒钟,并使用sqlite3 python模块编写结果。代码的编写部分非常简单:

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

但是很多工作都会抛出异常:
sqlite3.DatabaseError: database disk image is malformed

有时候

sqlite3.OperationalError: unable to open database file

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

据我所知,SQLite不支持并发写入。 - Rapolas K.
最好不要使用sqlite3,而是使用真正的数据库,如postgresql,这样可能会节省很多时间... - Antti Haapala -- Слава Україні
@RapolasK:是的,它做到了。 - Martijn Pieters
你是将数据库存储在网络驱动器上吗? - Martijn Pieters
@MartijnPieters:Lustre文件系统 - Shep
1个回答

5

SQLite不支持在分布式文件系统上进行存储。并发访问需要锁定,而这种锁定不能在这样的系统中传递。

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


1
很令人失望,我想我只能退而求其次使用旧方法(每个作业将输出写入自己的文件,稍后聚合)。 - Shep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接