可以锁定NFS文件系统上的sqlite文件



假设有两个python脚本想要将数据写入同一个表,该表使用sqlite3模块存储在SQLite文件中。SQLite文件存储在NFS文件系统中。在SQLite常见问题解答中,我读到:

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

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

INSERT并不复杂。只是一些:

INSERT_STATEMENT = "INSERT INTO some_table (row, col, val) VALUES (?, ?, ?)"
connection.executemany(INSERT_STATEMENT, triples)

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

另一个问题是:当两个进程试图写入同一个表时,或者当它们试图写入相同的数据库(即文件)时,是否会出现NFS问题?让每个进程在同一个数据库(文件)中创建自己的表并写入该表是否是一种变通方法?

不要将SQLite与NFS一起使用。就这么简单。NFS语义不同于常规文件系统,而且更松散。你最终会腐败。SQLite用户邮件列表上时不时会有人发布他们的"解决方案"。尽管它们在短期内似乎起作用,但它们从未起作用。

最新更新