集群中 NFS 上的 SQLite DB。我会收到数据损坏吗?

Posted

技术标签:

【中文标题】集群中 NFS 上的 SQLite DB。我会收到数据损坏吗?【英文标题】:SQLite DB on NFS in cluster. Will I get data corruption? 【发布时间】:2017-09-11 15:19:49 【问题描述】:

我将 SQLite 用于我想保留在 NFS 上的数据库。我集群中的任何虚拟机都可能在某个时候关闭,在这种情况下,docker swarm 会在另一个虚拟机上启动一个副本来接管。

不幸的是,NFS 似乎不支持文件锁定,所以我关闭了它(通过使用“nolock”安装)现在我担心我是否可以确定数据不会被损坏。

我能想到的场景是:其中一个 VM 只是与 Internet 断开了足够长的时间,以便另一个副本启动并接管流量,然后它返回并写入数据库 --> 损坏数据

如果支持文件锁定,这样使用 NFS 会不会省钱? 我是否正确地假设它不是在指定“nolock”时?

【问题讨论】:

【参考方案1】:

documentation 说的是nolock

这对于访问不支持锁定的文件系统上的数据库很有用。注意:如果两个或多个进程写入同一个数据库并且其中任何一个进程使用 nolock=1,则可能导致数据库损坏。

另一种方法是使用unix-dotfile VFS,它通过创建一个单独的文件来实现锁定。这甚至适用于无锁 NFS,但是

它比“真正的”锁定要慢; 它可以防止任何类型的并发(只有一个客户端可以访问数据库,即使是读取);和 如果您的客户端在事务处理过程中死亡,锁定文件仍然存在并且必须手动移除。

【讨论】:

感谢您提出这个有趣的替代方案以及文档中的信息。如果我找到一种方法来使用带有 nfs 的锁,那么在集群上使用它是否安全? 那要看加锁是否正确实现了。 添加文档链接:sqlite.org/vfs.html#standard_unix_vfses @CL。我尝试使用 unix-dotfile,但它不起作用 (github.com/optuna/optuna/issues/815)

以上是关于集群中 NFS 上的 SQLite DB。我会收到数据损坏吗?的主要内容,如果未能解决你的问题,请参考以下文章

NFS 上的 Hadoop 集群

Android SQLite DB 何时关闭

在尝试搜索数据库中的名称时遇到Tkinter Treeview和SQLite的问题

远程集群上的过时 NFS 文件句柄问题

将 Android 应用上的 SQLite DB 与远程 MySQL DB 同步

使用 SQLite3 DB 进行 REALBasic 报告