为啥 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 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 NSFileManager 不能与 UIDocumentBrowserViewController 一起使用?