假设有两个python脚本想要将数据写入同一个表,该表使用sqlite3
模块存储在SQLite文件中。 SQLite文件存储在NFS文件系统中。我在SQLite-FAQ读到了:
SQLite使用读取器/写入器锁来控制对数据库的访问。 [...]但请注意:此锁定机制可能无法正常工作 如果数据库文件保存在NFS文件系统上。这是因为 fcntl()文件锁定在许多NFS实现上都被破坏了。你应该 如果多个进程可能,请避免将SQLite数据库文件放在NFS上 尝试同时访问该文件。
这是否意味着它根本不可能或者是否有某种方法可以确保一个进程等到另一个进程完成?
INSERT并不复杂。只是一些:
INSERT_STATEMENT = "INSERT INTO some_table (row, col, val) VALUES (?, ?, ?)"
connection.executemany(INSERT_STATEMENT, triples)
插入的集合是不相交的。
另一个问题:当两个进程尝试写入同一个表或尝试写入同一个数据库(这是一个文件)时,是否会出现NFS问题?让每个进程在同一个数据库(文件)中创建自己的表并写入该表是否是一种解决方法?
答案 0 :(得分:19)
不要将SQLite与NFS一起使用。它是如此简单。 NFS语义与常规文件系统不同,并且更宽松。你最终会腐败。 SQLite用户邮件列表中的某个人偶尔发布他们的“变通办法”。他们从不工作,虽然他们似乎在短期内。