很多小文件或几个大文件?

时间:2009-06-26 21:25:34

标签: file filesystems performance filesize

在性能和效率方面,使用大量小文件(我的意思是多达几百万)或一对(十个左右)大(几千兆字节)文件是否更好?我们只是说我正在构建一个数据库(不完全正确,但重要的是它将被访问很多)。

我主要关注阅读性能。我的文件系统目前在Linux上是ext3(Ubuntu Server Edition,如果它很重要),虽然我处于可以切换的位置,因此不同文件系统之间的比较将是非常棒的。由于技术原因,我不能使用实际的DBMS(因此问题),所以“只使用MySQL”不是一个好的答案。

提前致谢,如果我需要更具体,请告诉我。


编辑:我将存储大量相对较小的数据,这就是为什么使用大量小文件对我来说会更容易。因此,如果我使用一些大文件,我一次只能从它们中检索几KB。我也会使用索引,所以这不是一个真正的问题。此外,一些数据指向其他数据(它将指向大量小文件中的文件,并指向大文件情况下文件中数据的位置)。

5 个答案:

答案 0 :(得分:5)

这里有很多假设,但是,出于所有意图和目的,搜索一个大文件比搜索一堆小文件要快得多

假设您正在查找文本文件中包含的文本字符串。搜索 1TB文件快得多,而不是打开 1,000,000 MB文件并搜索这些文件。

每个文件打开操作需要时间。只需打开一个大文件。

而且,在考虑磁盘性能时,单个文件比大量文件更有可能强烈存储

...同样,这些是概括而不了解您的具体应用程序。

享受,

Robert C. Cartaino

答案 1 :(得分:3)

TMO的主要问题是关于索引。如果您要在没有良好索引的大文件中搜索信息,则必须扫描整个文件以获取可能很长的正确信息。如果你认为你可以建立强大的索引机制那么好,你应该使用庞大的文件。

我更愿意将此任务委托给ext3,而ext3应该相当擅长。

编辑:

根据这个wikipedia article on ext3要考虑的事情是碎片确实会随着时间的推移而发生。因此,如果您有大量的小文件占据了文件系统的很大一部分,那么随着时间的推移,您将失去性能。

本文还验证了每个目录限制32k文件的声明(假设维基百科文章可以验证任何内容)

答案 2 :(得分:3)

这取决于。真。不同的文件系统以不同的方式进行优化,但通常,小文件被有效地打包。拥有大文件的好处是你不必打开和关闭很多东西。打开和关闭是需要时间的操作。如果您有一个大文件,通常只打开和关闭一次并使用搜索操作

如果您选择大量文件解决方案,我建议您使用

这样的结构
b/a/bar
b/a/baz
f/o/foo

因为您对目录中的文件数有限制。

答案 3 :(得分:2)

我相信Ext3每个目录限制大约32000个文件/子目录。如果您要将数百万个文件路由,您需要将它们分布在许多目录中。我不知道这对性能会有什么影响。

我的偏好是几个大文件。事实上,为什么有几个,除非他们是某种逻辑上独立的单位?如果你为了分裂而仍然将它分开,我说不要这样做。 Ext3可以很好地处理非常大的文件。

答案 4 :(得分:1)

我使用的系统可以在Linux下的XFS文件系统上存储多达约500万个文件,并且没有任何性能问题。我们只使用文件来存储数据,我们从不对它们进行全面扫描,我们有一个用于搜索的数据库,表中的一个字段包含我们用来检索的guid。我们使用如上所述的两个级别的目录,文件名是guid,但如果文件的数量更大,则可以使用更多。我们选择这种方法是为了避免在数据库中存储一些额外的TB,这些TB只需要存储/返回并且从不搜索过,并且它对我们来说效果很好。我们的文件范围从1k到约500k。

我们还在ext3上运行系统,它运行良好,但我不确定我们是否曾将它推过大约一百万个文件。由于每个目录的最大文件限制,我们可能需要转到3目录系统。