如何确保与sqlite和NFS安全的文件同步

时间:2011-02-18 15:44:43

标签: python sqlite sqlalchemy nfs

我最近将我的应用程序的工作区文件格式转换为sqlite。为了确保在NFS上运行稳健,我使用了一个通用的更新策略,我对存储在本地硬盘上临时位置的副本进行了所有修改。仅在保存时,我通过使用临时文件复制原始文件来修改原始文件(可能在NFS上)。我只打开原始文件以保持对它的独占锁定,以便其他人尝试打开它们将被警告其他人正在使用它。

问题是这样的:当我将我的临时文件保存回原始文件时,我必须释放原始文件上的锁,这为其他人提供了一个进入并取出原始文件的窗口,尽管是一个小窗口

我可以想到几个方法:

(1)通过使用sql简单地将temp的内容转储到原始文件,即在原始的vacumm原始文件上删除表,从temp中选择并插入原始文件。我不喜欢对存储在NFS上的sqlite文件进行sql操作。这让我害怕腐败问题。我是这样想的吗?

(2)使用各种额外文件作为防护装置,以防止其他人在复制原件上的温度时进入。将文件用作互斥锁充其量只是个问题。如果应用程序崩溃,我也不喜欢附加文件的想法。

我想知道是否有人对此有任何不同的解决方案。再次将临时文件复制到原始文件上,同时确保其他应用程序不会潜入并抓取原始文件这样做?

我正在使用python2.5,sqlalchemy 0.6.6和sqlite 3.6.20

谢谢, 迪安

1 个答案:

答案 0 :(得分:1)

SQLite NFS问题是由于缓存和锁定中断。如果您的进程是唯一一个在NFS上访问该文件的进程,那么您就可以了。

SQLite备份API旨在解决您的问题。您可以直接备份到NFS数据库或另一个本地临时文件,然后复制它。备份API处理所有锁定和并发问题。

您可以使用APSW访问备份API或最新版本的pysqlite。 (披露:我是APSW的作者。)