从多个硬盘驱动器并行读取

时间:2010-01-27 05:25:22

标签: parallel-processing hard-drive

我正在编写一个处理大量数据(千兆字节)的应用程序。我正在考虑将数据拆分到多个硬盘上并并行读取。我想知道我将遇到什么样的限制 - 例如,是否可以并行读取4个或8个硬盘驱动器,如果磁盘I / O是限制因素,我将获得大约4或8倍的性能?我应该注意什么?相关文档的指针也很受欢迎 - 谷歌没有多少出现。

编辑:我应该指出我已经看过RAID,但性能并不像我希望的那么好。我打算用C / C ++编写这个。

4 个答案:

答案 0 :(得分:2)

分离数据和并行读取4到8个驱动器不会使吞吐量跳跃4到8倍。您还需要考虑其他因素。

  1. 如果您在应用程序中读取数据,则可能需要线程从不同的硬盘读取数据。
  2. Windows提供重叠和非重叠的方法来读取和写入数据到hdd。看看使用它是否会增加吞吐量。同样的方式* nux也有读/写方法。
  3. 在单个核心/处理器上,线程看起来并行运行,但它的顺序是基础。对于多核,可以并行读取多个线程,但通常操作系统决定运行什么以及何时运行。因此,要读取这么多线程可能会降低性能而不是增加。
  4. 如果您检查任何硬盘的规格,您会看到它提供随机访问时间和顺序访问时间。因此,根据您的数据,您可能需要检查这些参数。
  5. 当您将数据拆分到不同的驱动器时,您需要记住,您的应用程序需要同步如何将数据填充到有意义的信息中。如果您使用线程,则另外线程应该同步。
  6. 您可能会获得具有高数据读/写速度的最先进的硬盘,但您可能是其他硬件的薄弱环节。因此,您可能正在使用低端主板或RAM,这可能无法让您获得最佳速度。

答案 1 :(得分:1)

如果您不打算使用真正的RAID,最好至少使用多个硬盘控制器,否则您根本不会看到太多的性能提升。一个控制器无法执行大量并发IO,因此很快就会成为瓶颈。

答案 2 :(得分:0)

听起来你在谈论数据条带化的概念。这通常用于RAID实现。您可能希望了解大多数操作系统可用的软件RAID解决方案之一。一个优点是你可以使用raid来增加你的优势并增加奇偶校验(丢失驱动器的能力,而不是你的数据)

这将为您提供RAID的好处,而无需亲自尝试处理它。您可以在数据库级别以及分布在驱动器上的数据文件中执行此操作,但这会增加复杂性。

您将更快地流式传输数据。驱动器只有这么快,如果你的I / O通道可以处理更多。还有时间考虑......根据你的应用程序描述,可能不是什么大不了的事。

答案 3 :(得分:0)

看起来重新配置驱动器似乎没问题,SSD怎么样? 它们在任何机械驱动器周围运行环(读取大约200 + GB /秒,写入150 + GB /秒)。

您是按顺序读取数据还是随机读取数据? 你期待多少GB?

相关问题