2

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

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

4

4 回答 4

2

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

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

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

于 2010-01-27T05:59:51.257 回答
0

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

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

于 2010-01-27T05:46:48.407 回答
0

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

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

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

于 2010-01-27T05:36:28.593 回答