可以在NFS文件系统上锁定sqlite文件吗?

Auf*_*ind 12 python sqlite nfs locking

假设有两个python脚本想要将数据写入同一个表,该表使用该sqlite3模块存储在SQLite文件中.SQLite文件存储在NFS文件系统中.在SQLite-FAQ中我读到:

SQLite使用读取器/写入器锁来控制对数据库的访问.[...]但请注意:如果数据库文件保存在NFS文件系统上,则此锁定机制可能无法正常工作.这是因为许多NFS实现都会破坏fcntl()文件锁定.如果多个进程可能同时尝试访问该文件,则应避免将SQLite数据库文件放在NFS上.

这是否意味着它根本不可能或者是否有某种方法可以确保一个进程等待另一个进程完成?

INSERT并不复杂.一些:

INSERT_STATEMENT = "INSERT INTO some_table (row, col, val) VALUES (?, ?, ?)"
connection.executemany(INSERT_STATEMENT, triples)
Run Code Online (Sandbox Code Playgroud)

并且插入的集合是不相交的.

另一个问题:当两个进程尝试写入同一个表或尝试写入同一个数据库(这是一个文件)时,是否会出现NFS问题?让每个进程在同一个数据库(文件)中创建自己的表并写入该表是否是一种解决方法?

Rog*_*nns 21

不要将SQLite与NFS一起使用.它是如此简单.NFS语义与常规文件系统不同,并且更宽松.你最终会腐败.SQLite用户邮件列表中的某个人偶尔发布他们的"变通办法".他们从不工作,虽然他们似乎在短期内.

  • 听听这个男人.[他是权威人士.](http://code.google.com/p/apsw/) (7认同)
  • 当你最终腐败时,请确保提到你使用了NFS.当每个人的反应是"不要那样做"时,不要感到惊讶. (4认同)
  • 听起来答案可能更像是“如果 NFS 实现正确执行 X、Y 和 Z,这是可能的,而有些则不然” 例如,https://aws.amazon.com/about-aws/whats -new/2017/03/amazon-elastic-file-system-amazon-efs-now-supports-nfsv4-lock-upgrading-and-downgrading/ 提到 EFS (AWS NFS impl) 现在支持 NFSv4 锁升级和降级,并且特别调用 SQLite。这似乎解决了有关锁定的警告。是否还有 SQLite 依赖的其他文件系统语义,并且对于某些 NFS 实现来说是不确定的?如果是这样,那又怎样? (2认同)