为啥 sqlite3 不能与 NFS 一起使用?

Posted

技术标签:

【中文标题】为啥 sqlite3 不能与 NFS 一起使用?【英文标题】:Why sqlite3 can't work with NFS?为什么 sqlite3 不能与 NFS 一起使用? 【发布时间】:2012-12-06 21:22:47 【问题描述】:

我改用 sqlite3 而不是 mysql,因为我必须在没有 mysql 的 PBS 系统上运行许多作业。当然,在我的机器上我没有 NFS,而 PBS 上存在 NFS。在花费大量时间切换到 sqlite3 之后,我去运行许多工作并且我损坏了我的数据库。 当然在 sqlite3 FAQ 中提到了 NFS,但我刚开始时甚至没有考虑过。

我可以在工作开始时复制数据库,但它会变成合并的噩梦!

我永远不会向我的任何同事推荐 sqlite,原因很简单:“sqlite 不起作用(在重要的机器上)”

我读过关于 NFS 没有达到标准的咆哮,这是他们的错。 我尝试了一些解决方法,但正如this post 建议的那样,这是不可能的。

难道没有牺牲性能的解决方法吗?

那我该怎么办?试试其他的数据库软件?哪一个?

【问题讨论】:

什么是 PBS?哪些客户正在访问您的数据库?为什么需要 NFS? 好吧,如果您无法访问诸如 MySQL 之类的数据库引擎,也没有支持基于文件的数据库所需的那种锁定的文件系统,那么我会说您运气不好(除非你想实现一个基于原子 mkdir 的数据库或类似的东西)。 PBS? 如果你不能在你的操作系统上使用一个好的数据库,你几乎就是 SOL。 【参考方案1】:

您使用了错误的工具。根据这个经验说“我永远不会推荐 sqlite ...”有点像在你用它们敲钉子时说“我永远不会推荐玻璃瓶”。

您需要更准确地说明您的问题。我试图在你问题的字里行间阅读给了我这样的东西:

您有许多节点通过一些未指定的路径工作,并产生输出。作业不交互,因为您说您可以复制数据库。所有作业的输出可以在完成后合并。你如何有效地产生合并的输出?

鉴于这个问题,这是我的建议:

让每个作业在一个结构化文件中生成其输出,每个作业都是独一无二的。作业完成后,编写一个程序来解析每个文件并将其插入到 sqlite3 数据库中。这以它可以处理的方式使用 NFS(单进程按顺序写入文件)并以同样合理的方式使用 sqlite3(单进程写入本地文件系统上的数据库)。这可以避免在运行作业时出现 NFS 锁定问题,并且应该会提高吞吐量,因为您不会在 sqlite3 数据库上发生争用。

【讨论】:

以上是关于为啥 sqlite3 不能与 NFS 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

Python sqlite3 占位符

为啥 NSFileManager 不能与 UIDocumentBrowserViewController 一起使用?

为啥 FileProvider 不能与广播一起使用?

为啥 ByRef 不能与 WithEvents 一起使用?

为啥 TransactionScope 不能与 Sqlite 一起使用?

为啥 overScrollBy() 和 onOverScrolled() 不能与 RecyclerView 一起使用