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

标签 python sqlite sqlalchemy nfs

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

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

我可以想到一些解决方法:

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

(2) 使用各种额外的文件作为守卫,以防止其他人在将临时文件复制到原始文件上时进入。使用文件作为互斥体充其量是有问题的。我也不喜欢在应用程序崩溃时保留额外文件的想法。

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

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

谢谢, 院长

最佳答案

SQLite NFS 问题是由于缓存和锁定损坏造成的。如果您的进程是唯一一个访问 NFS 上文件的进程,那么您就没问题。

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

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

关于python - 如何确保与 sqlite 和 NFS 的安全文件同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5043327/

相关文章:

python - Sqlalchemy 返回元组

Python __init__.py 与 sys.path.append/insert

用于删除重复的 SQL 查询

SQL WHERE LIKE 带选项卡

python - 如何使用 Mock 框架更改模拟方法的输出?

python - Docker:如何获取 virtualenv 并安装 requirements.txt?

python - 使用来自 Azure IoT 中心的数据

database - Android:数据库读取问题抛出异常

python - 使用 sqlalchemy 关联代理正确级联删除

python - SQLAlchemy - 如何使预加载计数属性