从一个目录读取许多小文件有多大问题?
Posted
技术标签:
【中文标题】从一个目录读取许多小文件有多大问题?【英文标题】: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 性能改进。 你能改变一个目录的限制吗?您可以在这里找到一些有用的信息:***.com/questions/8238860/… 【参考方案1】:这可能没那么糟糕:如果您枚举文件,并在遇到每个文件名时对其进行处理,您的操作系统很可能在其磁盘缓存中具有目录条目。出于实际目的,磁盘缓存是 O(1)。
会杀死你的是机械硬盘。您将有 500 万次磁盘查找,每次查找大约需要 1/100 秒。那是 50.000 秒,超过半天。这是一项需要 SSD 的任务。
【讨论】:
以上是关于从一个目录读取许多小文件有多大问题?的主要内容,如果未能解决你的问题,请参考以下文章