【问题标题】:Reading in parallel from multiple hard drives从多个硬盘并行读取
【发布时间】:2011-01-09 19:51:29
【问题描述】:

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

编辑:我应该指出我已经研究过 RAID,但性能并没有我希望的那么好。我打算自己用 C/C++ 编写这个。

【问题讨论】:

  • “千兆字节”并不是很多数据,IMO;当你达到 TB 或至少 100 GB 左右时,我会开始考虑这个问题。在此之前,高效的数据结构远比数据分区重要。
  • 再看RAID。具体来说,RAID 0 或 10。您是在浪费时间,因为 RAID 完全符合您的要求,而且做得更好。

标签: parallel-processing hard-drive


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      听起来您在谈论数据条带化的概念。这通常用于 RAID 实施。您可能想要研究适用于大多数操作系统的软件 RAID 解决方案之一。一个优势是,如果您可以利用 raid 来发挥自己的优势并添加奇偶校验(丢失驱动器而不是数据的能力)

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

      您将更快地传输数据。驱动器只有这么快,如果您的 I/O 通道可以处理更多,那就去吧。还有一些需要考虑的时间...根据您的应用描述,可能没什么大不了的。

      【讨论】:

        【解决方案4】:

        您似乎对重新配置驱动器感到满意,那么 SSD 怎么样? 它们围绕任何机械驱动器运行(读取速度高达 200+GB/秒,写入速度高达 150+GB/秒)。

        您是按顺序读取数据,还是随机读取? 您预计有多少 GB?

        【讨论】:

          猜你喜欢
          • 2012-07-09
          • 2012-05-15
          • 2017-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-21
          • 1970-01-01
          相关资源
          最近更新 更多