代码之家  ›  专栏  ›  技术社区  ›  Sasha Chedygov

很多小文件还是几个大文件?

  •  4
  • Sasha Chedygov  · 技术社区  · 15 年前

    在性能和效率方面,使用大量的小文件(我的意思是多达几百万个)或几个(大约十个)大文件(几千GB)是更好的选择吗?假设我正在构建一个数据库(并非完全正确,但重要的是它将被大量访问)。

    我主要关注的是阅读性能。我的文件系统目前是Linux上的ext3(如果重要的话,是ubuntu服务器版),尽管我处在一个可以切换的位置,所以不同文件系统之间的比较会非常好。出于技术原因,我不能使用实际的DBMS来解决这个问题(因此出现了问题),所以“只使用MySQL”不是一个好答案。

    事先谢谢,如果需要更具体的话,请告诉我。


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

    5 回复  |  直到 15 年前
        1
  •  5
  •   Robert Cartaino    15 年前

    这里有很多假设,但是为了所有的意图和目的,搜索 大文件要快得多 而不是搜索一堆小文件。

    假设你是 查找文本字符串 包含在文本文件中。搜索 1TB文件 快得多 比开放 1000000 MB文件 并在其中寻找。

    文件打开操作需要时间 . 大文件只需打开一次。

    在考虑 磁盘性能 ,单个文件更可能是 不停地储存 而不是一系列的文件。

    …同样,这些是在不了解更多特定应用程序的情况下进行的归纳。

    享受,

    罗伯特·C·卡塔诺

        2
  •  3
  •   Stefano Borini    15 年前

    这要看情况而定。真的?不同的文件系统是以不同的方式优化的,但一般来说,小文件是有效打包的。拥有大文件的好处是你不需要打开和关闭很多东西。打开和关闭是需要时间的操作。如果您有一个大文件,则通常只打开和关闭一次,并使用查找操作

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

    b/a/bar
    b/a/baz
    f/o/foo
    

    因为目录中的文件数量是有限的。

        3
  •  3
  •   Eric    15 年前

    这里的主要问题是关于索引。如果你要在一个没有好索引的大文件中搜索信息,你就必须扫描整个文件,寻找可能很长的正确信息。如果您认为可以构建强大的索引机制,那么很好,您应该使用大文件。

    我更愿意把这个任务委托给ext3,它应该非常擅长。

    编辑:

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

    本文还验证了每个目录限制约32K个文件的声明(假设wikipedia文章可以验证任何内容)

        4
  •  2
  •   rmeador    15 年前

    我认为ext3每个目录的文件/子目录数量限制在32000个左右。如果您要通过数百万个文件路径,则需要将它们分布在多个目录中。我不知道那会对表演有什么影响。

    我喜欢几个大文件。事实上,为什么要有几个,除非它们是某种逻辑上独立的单元?如果你只是为了把它分开,我说不要那样做。ext3可以处理非常大的文件。

        5
  •  1
  •   bdk    15 年前

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

    我们也在ext3上运行了这个系统,它运行得很好,尽管我不确定我们是否将它推过大约一百万个文件。由于每个目录的最大文件数限制,我们可能需要转到3目录系统。