3

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

假设:

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

    SELECT *
    FROM Media_File
    WHERE FilePath LIKE 'Path/To/Current/Media/Folder/%'

4

2 回答 2

6

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

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

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

于 2011-03-17T16:45:49.467 回答
2

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

当谈到这个级别的性能问题时,答案通常是:视情况而定。因此,对您自己的解决方案进行基准测试,看看哪一个最能满足您特定用户的情境需求。

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

于 2011-03-22T02:11:13.653 回答