【问题标题】:Database disk image is malformed from many concurrent writes许多并发写入导致数据库磁盘映像格式错误
【发布时间】:2013-08-14 17:03:45
【问题描述】:

我正在使用 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 应该知道耐心等待文件空闲。我的错误可能是由于并发写入过多造成的吗?我该如何解决?

【问题讨论】:

  • Afaik,sqlite 不支持并发写入。
  • 最好不要使用 sqlite3;改用像 postgresql 这样的真实数据库,可能最终会节省相当多的时间......
  • @RapolasK.: 是的。
  • 您是否将数据库存储在网络驱动器上?
  • @MartijnPieters: Lustre 文件系统

标签: python sqlite


【解决方案1】:

SQLite支持分布式文件系统上的存储。并发访问需要锁定,并且不会在这样的系统中传输。

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

【讨论】:

  • 这令人失望,我想我会使用旧方法(每个作业都将输出写入自己的文件,稍后再聚合)
猜你喜欢
  • 2014-05-02
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多