我应该如何优化这个文件系统 I/O 绑定程序?

2024-05-05

我有一个 python 程序,它执行如下操作:

  1. 从 csv 文件中读取一行。
  2. 对其进行一些变换。
  3. 将其分解为实际的行,因为它们将被写入数据库。
  4. 将这些行写入单独的 csv 文件。
  5. 除非文件已完全读取,否则返回步骤 1。
  6. 运行 SQL*Loader 并将这些文件加载​​到数据库中。

第 6 步实际上并不需要太多时间。似乎第四步占用了大部分时间。在大多数情况下,我想对此进行优化,以处理在具有某种 RAID 设置的四核服务器上运行的一组数以百万计的记录。

我必须解决这个问题有几个想法:

  1. 从第一步读取整个文件(或至少以非常大的块读取)并将文件作为整体或以非常大的块写入磁盘。这个想法是硬盘在文件之间来回花费的时间更少。这会做缓冲不会做的事情吗?
  2. 将步骤 1、2&3 和 4 并行化为单独的进程。这将使步骤 1、2 和 3 不必等待步骤 4 完成。
  3. 将加载文件分成单独的块并并行处理它们。不需要按任何顺序处理行。这可能需要以某种方式与步骤 2 结合起来。

当然,这个问题的正确答案是“通过测试做你认为最快的事情”。然而,我主要是想知道我应该首先把时间花在哪里。在这些问题上有更多经验的人有什么建议吗?


穷人的地图缩减:

Use split http://www.gnu.org/manual/gawk/html_node/Split-Program.html将文件分成与 CPU 数量一样多的块。

Use batch http://linux.about.com/library/cmd/blcmdl1_batch.htm并行运行你的咀嚼器。

Use cat http://www.gnu.org/software/coreutils/manual/html_node/cat-invocation.html#cat-invocation连接结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该如何优化这个文件系统 I/O 绑定程序? 的相关文章

随机推荐