【问题标题】:How problematic is it to read many small files from one directory?从一个目录读取许多小文件有多大问题?
【发布时间】:2016-09-12 12:02:01
【问题描述】:

我必须阅读许多(最多 5 mio.)小 (9 KB) 文件。目前它们都在一个目录中。我担心这将花费二次时间甚至 n^2 log n 进行查找,对吗?这是否重要(查找是否会比实际阅读花费更多时间)?当文件被操作系统缓存时,运行时间的渐近行为是否存在差异?

我使用 C++ 流来读取文件。目前我使用的是带有 NTFS 的 Windows 7,但稍后我将在 linux 集群上运行该程序(不确定是哪个文件系统)。

【问题讨论】:

  • 使用内存映射 I/O。根据我的测试,这是您可以做出的最大的文件 I/O 性能改进。
  • 你能改变一个目录的限制吗?您可以在这里找到一些有用的信息:stackoverflow.com/questions/8238860/…

标签: c++ linux windows


【解决方案1】:

这可能没那么糟糕:如果您枚举文件,并在遇到每个文件名时对其进行处理,您的操作系统很可能在其磁盘缓存中具有目录条目。出于实际目的,磁盘缓存是 O(1)。

杀死你的是机械硬盘。您将有 500 万次磁盘查找,每次查找大约需要 1/100 秒。那是 50.000 秒,超过半天。这是一项需要 SSD 的任务。

【讨论】:

    猜你喜欢
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 2013-09-04
    • 1970-01-01
    • 2015-08-19
    相关资源
    最近更新 更多