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

2024-04-28 21:09:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

SQLite uses reader/writer locks to control access to the database. [...] But use caution: this locking mechanism might not work correctly if the database file is kept on an NFS filesystem. This is because fcntl() file locking is broken on many NFS implementations. You should avoid putting SQLite database files on NFS if multiple processes might try to access the file at the same time.

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

插件并不复杂。只是一些:

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

插入的集合是不相交的。

还有一个问题:当两个进程试图写入同一个表时,或者当它们试图写入同一个数据库(这是一个文件)时,是否会发生NFS问题?让每个进程在同一个数据库(文件)中创建自己的表并写入该表是否是一种解决方法?


Tags: 文件thetolockingsqliteifaccess进程
1条回答
网友
1楼 · 发布于 2024-04-28 21:09:53

不要将SQLite与NFS一起使用。就这么简单。NFS语义不同于常规的文件系统,并且更加松散。你最终会腐败。时不时地,SQLite用户的邮件列表中会有人用他们的“解决方案”发帖。他们从不工作,尽管他们看起来在短期内。

相关问题 更多 >