我正在编写一个处理大量数据(千兆字节)的应用程序。我正在考虑将数据拆分到多个硬盘驱动器上并并行读取。我想知道我会遇到什么样的限制——例如,是否可以从 4 个或 8 个硬盘驱动器并行读取,如果磁盘 I/O 是限制因素,我将获得大约 4 或 8 倍的性能? 我应该注意什么?指向相关文档的指针也很受欢迎——谷歌并没有出现太多。
编辑:我应该指出我看过 RAID,但性能不如我希望的那么好。我打算自己用 C/C++ 编写这个。
我正在编写一个处理大量数据(千兆字节)的应用程序。我正在考虑将数据拆分到多个硬盘驱动器上并并行读取。我想知道我会遇到什么样的限制——例如,是否可以从 4 个或 8 个硬盘驱动器并行读取,如果磁盘 I/O 是限制因素,我将获得大约 4 或 8 倍的性能? 我应该注意什么?指向相关文档的指针也很受欢迎——谷歌并没有出现太多。
编辑:我应该指出我看过 RAID,但性能不如我希望的那么好。我打算自己用 C/C++ 编写这个。
拆分数据并从 4 到 8 个驱动器并行读取不会使吞吐量提高 4 到 8 倍。您还需要考虑其他因素。
如果你不打算使用真正的 RAID,你最好至少使用多个硬盘控制器,否则你根本不会看到太多的性能提升。一个控制器无法处理大量并发 IO,因此很快就会成为瓶颈。
您似乎可以重新配置驱动器,那么 SSD 怎么样?它们围绕任何机械驱动器运行(读取速度高达 200+GB/秒,写入速度高达 150+GB/秒)。
您是按顺序读取数据,还是随机读取?您期望多少 GB?
听起来您在谈论数据条带化的概念。这通常用于 RAID 实施。您可能想要研究适用于大多数操作系统的软件 RAID 解决方案之一。一个优势是,如果您可以利用 raid 来发挥自己的优势并添加奇偶校验(丢失驱动器而不是数据的能力)
这将为您带来 RAID 的好处,而无需自己尝试处理。您也可以在数据库级别上执行此操作,也可以将数据文件分布在驱动器上,但这会增加复杂性。
您将更快地传输数据。驱动器只有这么快,如果您的 I/O 通道可以处理更多,那就去吧。还有一些需要考虑的时间……根据您的应用描述,可能没什么大不了的。