【发布时间】:2009-07-08 07:38:52
【问题描述】:
我正在开发一个内容管理应用程序,其中存储在数据库中的数据非常通用。在这个特定的例子中,一个容器有很多资源,这些资源映射到某种数字资产,无论是图片、电影、上传的文件还是纯文本。
我已经和一位同事争论了一个星期了,因为除了存储图片等之外,他们还希望将文本资产存储在文件系统上并让应用程序查找文件位置(从数据库中)并在提供给客户端应用程序之前读入文本文件(从文件系统)。
常识似乎对我大喊,这太荒谬了,如果我们费心从数据库中查找某些内容,我们不妨将文本存储在数据库列中,并将其与行查找一起提供。数据库查找 + 文件 IO 听起来比数据库查找慢得多。来来回回了一段时间后,我决定运行一些基准测试,发现结果有点令人惊讶。在基准时间方面似乎几乎没有一致性。基准测试中唯一明显的赢家是从数据库中提取一个大型数据集并迭代结果以显示文本资产,但是从数据库中一次提取一个对象并显示其文本内容似乎并驾齐驱。
现在我知道了运行基准测试的局限性,我什至不确定我是否在运行“测试”的正确概念(例如,文件系统写入比数据库写入快得离谱,我不知道!)。我想我的问题是为了确认。文件 I/O 是否可与数据库文本存储/查找相媲美?我在这里遗漏了部分论点吗?提前感谢您的意见/建议!
快速了解我正在使用的内容: 这是一个 Ruby on Rails 应用程序, 使用 Ruby 1.8.6 和 Sqlite3。我打算 将相同的代码库移至 MySQL 明天看看基准是否 一样的。
【问题讨论】:
-
我自己没有做过这样的测试,但我想知道文件系统在存在大量文件的情况下如何运行。归根结底,文件系统也只是一种数据库。我喜欢“真实”数据库的是事务处理/原子插入。不知何故,我对文件系统感到偏执,并担心写入可能会在操作过程中崩溃,从而使整个文件处于损坏状态。也就是说,我认为将大型“哑”文件(如图像)放在文件系统上并将它们的文件名存储在数据库中是一种常见的方法。不过,请尝试让 Web 服务器直接为其提供服务。
标签: ruby-on-rails ruby database file-io