假设有两个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)
而且插入的集合是不相交的。
进一步的问题:NFS问题是否发生在两个进程尝试写入同一个表时或者当他们尝试写入同一个数据库(即文件)时?让每个进程在同一个数据库(文件)中创建自己的表并写入这个表,这是否是一个解决方法?