在性能和效率方面,是它更好地使用大量小文件(由很多我的意思是多达几百万),或一对夫妇(十个左右)巨大的(几个千兆字节)的文件?这么说吧,我建立一个数据库(并非完全如此,但所有重要的是,它的将要访问的LOT)。

我主要关心的读取性能。我的文件系统是目前在Linux EXT3(Ubuntu服务器版,如果它的事项),虽然我在一个位置,我仍然可以切换来的,所以不同的文件系统之间的比较将是美妙的。由于技术原因,我不能用这个实际的DBMS(因此这个问题),所以“只使用MySQL”是不是一个很好的答案。

在此先感谢,让我知道,如果我需要更加具体。


编辑:我要来存储大量的相对小的数据块,这就是为什么使用大量小文件将是对我更容易。所以,如果我用几个大文件中去了,我只可以在同一时间获取几KB了出来。我也可以使用索引,所以这不是一个真正的问题。此外,一些数据指向其他数据块(它会指向许多-的小文件的情况下的文件,并指向大文件的情况下,文件中的数据的位置)。

有帮助吗?

解决方案

有很多在这里的假设,但对于所有意图和目的,通过搜索一个大文件会多更快不是通过一堆小文件搜索。

让我们说你的寻找文本字符串包含在一个文本文件中。搜索一个 1TB文件更快不是打开的 1,000,000 MB的文件,并通过这些搜索。

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

和,在考虑磁盘性能后,一个单一的文件更可能是存储contigously 比一个大的一系列文件。

...同样,这些都是不知道更多关于你的具体的应用推广。

欣赏,

罗伯特C. Cartaino

其他提示

这取决于。真。不同的文件系统都以不同的方式进行了优化,但在一般情况下,小文件都有效的填充。具有大文件的好处是,你不必打开和关闭了很多东西。打开和关闭是需要时间的操作。如果你有一个大的文件时,你通常打开和关闭只有一次,你使用搜索操作

如果你去了很多-的-文件的解决方案,我建议你喜欢

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

因为你上的文件目录中的数量限制。

主要的问题在这里TMO是关于索引。如果你要在一个巨大的文件中搜索信息,如果没有良好的指标,你就必须扫描可以是长期的正确信息的整个文件。如果你认为你可以建立强大的索引机制再细,你应该去与巨大的文件。

我更愿意将这个任务交给EXT3这应该是相当不错的了。

编辑:

一个东西根据本维基百科上的ext3 文章是碎片并在考虑发生时间。所以,如果你有这把文件系统的显著比例,那么你将失去的演出随着时间的推移小文件数量巨大。

本文还验证关于每个目录极限(假设维基百科文章可以验证任何东西)

32K文件要求

相信Ext3有每个目录约32000的文件/子目录的限制。如果你打算以百万计的文件路径,你需要他们散布全国各地的许多目录。我不知道这是什么会做性能。

我更倾向于将针对几个大文件。事实上,为什么有几个可言,除非他们是某种逻辑上独立的单位?如果你还在分裂它只是分裂它的缘故,我说不要那样做。 EXT3可以处理非常大的文件就好了。

我与存储最多约5万个文件在Linux下的XFS文件系统上,并没有任何性能问题的系统工作。我们只用文件存储数据,我们从来没有完全对其进行扫描,我们有一个数据库,以便查询,并在表中的字段一个包含我们用它来检索GUID。我们用了整整两个级别的目录如上面的文件名作为GUID,但更多的可以使用,如果文件数量得到更大。我们选择这种方法可避免储存在仅需要存储/返回,永不通过搜索数据库中的一些额外的TB的它一直很适合我们。我们的文件范围从1K至约500K。

我们也对ext3的运行系统,它运作正常,虽然我不知道如果我们推它过去一百万个文件。我们可能就需要去3目录系统由于每个目录限制最大文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top