基于文件系统的读取与简单的数据库查询?

时间:2011-03-17 15:45:31

标签: c# file-io comparison kentico

我们使用的称为Kentico的CMS在文件系统上存储媒体库文件,并且还在数据库中存储文件元数据(标题,描述等)的记录。当您使用媒体库控件列出这些项目时,它将从文件系统中读取文件以显示它们。从文件系统读取然后查询数据库是否更快?或者在媒体文件元数据库表上运行简单查询会更快吗?

假设:

  • Kentico是一个ASP.NET应用程序,因此代码在C#中。他们使用简单的DataSet来传递数据。
  • 只会从文件名和大小等直接文件中读取元数据。
  • 每个文件夹最多100个文件。
  • 数据库查询将被正确编入索引。
  • 查询类似于:

    SELECT *
    来自Media_File
    在哪里FilePath LIKE'路径/到/当前/媒体/文件夹/%'

2 个答案:

答案 0 :(得分:6)

简短的回答是,它取决于许多可变因素,但文件系统通常会比数据库快。

更长的答案是:在已知位置扫描本地文件系统通常很快,因为资源靠近家庭,计算机设计用于非常有效地执行这些操作。

然而,它是否比数据库更快取决于数据库实现,它所在的位置以及我们正在讨论的数据量。总的来说,DBMS经过优化,可以非常有效地存储和查询大型数据集,而“扁平”文件系统只能像硬件一样快速扫描驱动器。它们的速度有多快取决于实现(SqLite总体上不如MS Sql Server或Oracle那么快),通信方案(通过网络传输文件是计算机定期执行的最慢的事情;相比之下,命名管道提供非常快速的进程间通信),以及你投入多少硬件(带有SATA-RAID条带化的四核Xeon刀片服务器将比你的Celeron笔记本电脑快得多)。

答案 1 :(得分:2)

除了其他人在此处所说的内容之外,根据您的缓存设置,缓存也可以发挥作用。不要忘记将这些考虑在内,因为Kentico,SQL和IIS都有许多不同级别的缓存,并且在不同的时间使用,具体取决于您的设置,配置以及您正在优化的用例。

在这个级别的性能问题上,答案往往是:它取决于。因此,对您自己的解决方案进行基准测试,以了解哪一个最能帮助您满足特定用户的情境需求。

Kentico确实发布了一些性能指南(适用于5.0,另一个适用于5.5)可能有所帮助,但在您自行测试之前,他们仍然不会给您一个明确的答案。