首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >减少读取许多小文件时的寻道时间

减少读取许多小文件时的寻道时间
EN

Stack Overflow用户
提问于 2012-03-23 21:12:36
回答 5查看 3K关注 0票数 17

我需要编写一些代码(使用任何语言)来处理驻留在本地Linux文件系统上的10,000个文件。每个文件的大小约为500KB,并由固定大小的记录组成,每个记录大小为4KB。

每条记录的处理时间可以忽略不计,并且可以在不同的文件内和跨不同的文件以任何顺序处理记录。

一个天真的实现会以某种任意的顺序一个接一个地读取文件。然而,由于我的磁盘读取速度非常快,但是寻道速度很慢,这几乎肯定会产生受磁盘寻道约束的代码。

有没有办法对读数进行编码,使其受磁盘吞吐量而不是寻道时间的限制?

一行查询是尝试获得文件在磁盘上所在位置的大致概念,并使用该概念对读取进行排序。但是,我不确定可以使用什么API来实现这一点。

当然,我对任何其他想法都持开放态度。

文件系统是ext4,但这是可以协商的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-03-23 22:19:42

也许您可以通过使用aio_read快速连续地调度所有读取来完成读取。这将一次将所有读取放入文件系统读取队列中,然后文件系统实现可以自由地以最小化寻道的方式完成读取。

票数 6
EN

Stack Overflow用户

发布于 2012-03-23 22:20:52

一种非常简单的方法,尽管不能保证结果。一次打开尽可能多的文件,一次读取所有文件-无论是使用线程还是异步I/O。这样,磁盘调度程序就会知道您读取的内容,并可以自行减少寻道。编辑:正如wildplasser所观察到的,并行open()可能只能使用线程,而不能使用异步I/O。

另一种选择是尝试自己做繁重的工作。不幸的是,这涉及到一个困难的步骤-获得文件到物理块的映射。没有标准接口可以做到这一点,您可能可以从ext2fsprogs或内核FS驱动程序中提取逻辑。这涉及到读取挂载的文件系统底层的物理设备,它可以在您尝试获取一致快照的同时对其进行写入。

获得物理数据块后,只需对它们进行排序,将映射反向到文件偏移量,并按物理数据块顺序执行读取。

票数 2
EN

Stack Overflow用户

发布于 2012-03-23 22:16:39

您能推荐使用SSD进行文件存储吗?这应该会大大减少搜索时间,因为没有头部可以移动。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9839820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档