2

我想将一个大文件写入本地磁盘。我将大文件分成许多小文件,并尝试将其写入磁盘。但我观察到,当我拆分文件并尝试写入时,磁盘写入时间大幅增加。

另外,我从磁盘复制文件并将其写入另一台计算机的磁盘(减速器)。我观察到阅读时间也有很大的增加。任何人都可以解释我的原因吗?我正在使用hadoop。

谢谢!

4

2 回答 2

3

这是由于底层文件系统和硬件造成的。

除了内容之外,每个文件都有开销,例如 NTFS 的 MFT(在 Windows 上)。所以对于单个大文件,文件系统可以做更少的簿记。因此它更快。

根据您的操作系统的安排,单个大文件往往会尽可能写入硬盘的连续扇区,但多个小文件可能会也可能不会这样写入。因此,增加的查找时间可能会导致许多小文件的读取时间增加。

您的操作系统的效率也可能发挥重要作用。例如是否预取文件内容,如何使用缓冲区等。对于许多小文件,操作系统更难以有效地使用缓冲区(并处理其他问题)。(在不同的场景下,它的行为可能会有所不同。)

编辑:至于您提到的复制过程,通常您的操作系统按以下步骤进行操作:

从磁盘读取数据->将数据写入缓冲区->从缓冲区读取->写入(可能是另一个)磁盘

这通常在多个线程中完成。当处理许多小文件时,操作系统可能无法有效地协调这些线程(一些线程非常忙,而另一些则必须等待)。对于单个大文件,操作系统不必处理这些问题。

于 2012-10-31T05:04:41.217 回答
3

每个文件系统都定义了一个最小单元(不可共享)来存储名为 page 的数据。例如,在文件系统中,页面大小为 4KB。现在,如果您保存一个 8 KB 的大文件,它将占用磁盘上的 2 页。但是如果将文件分成 4 个文件,每个文件大小为 2KB,那么它将占用磁盘上的 4 个半满页,占用大小为 16KB 的磁盘空间。

同样,如果您将文件分成 8 个小文件,每个大小为 1KB,那么它将占用磁盘中的 8 个页面,尽管部分已被填充,并且您的 32KB 磁盘空间被占用。

读取开销也是如此。如果你的文件为几页,那么可能是分散的。这将导致寻道时间/访问时间的高开销。

于 2012-10-31T05:25:06.640 回答