在 Ruby 中读取大文件的最快方法是什么?



我已经看到了这个问题的答案,但我无法弄清楚哪个答案表现最快。这些是我见过的答案 - 哪个是最好的?

  1. 使用每行或每行each_line一次阅读一行
  2. 使用 get 一次读取一行
  3. 使用
  4. readline将其全部保存到行数组中,然后使用每个行
  5. 使用 grep(
  6. 不确定如何处理 grep...)
  7. 使用 sed
  8. (不确定该怎么处理 sed...
  9. 别的?

另外,只使用另一种语言会更好还是Ruby应该没问题?

编辑:

更多详细信息:每行都包含类似"id1 attr1_1 attr2_1 id2 attr1_2 attr2_2...idn attr1_n attr2_n"(n 非常大),我需要将它们插入数据库。对于该示例行,我需要将 n 行插入数据库。

Ruby 可能会使用相同或非常相似的低级代码(用 C 编写)来执行前三个选项的磁盘实际读取,因此它们应该执行类似的操作。鉴于此,您应该选择对您最方便的一种;做到这一点的能力使像Ruby这样的语言如此有用!您将从磁盘读取大量数据,因此我建议使用each_line并在读取时处理每一行。

我不建议将grepsed或任何其他此类外部实用程序带入图片,除非您有充分的理由,因为它们会使您的代码的可移植性降低,并使您面临可能难以诊断的故障。

如果你使用的是Ruby,那么就没有必要担心性能问题。该语言适合逐行读取文件的迭代方法,并且工作得很好。只要你按照设计的方式使用语言,你就可以让口译员担心性能。工作完成。

如果需要一个特定的 readLargeFileFast 方法,那么它应该是因为它确实以某种方式阻碍了程序。现在,您编写一个 C 程序来执行此操作,并将其作为 ruby 代码中的单独进程popen。你可以称它为read_large.c,(也许)使用命令行参数来告诉它如何表现。

这是在倡导脚本语言用于快速开发而不是快速运行时间的想法。因此,开发人员可以通过在Ruby之类的东西中快速"原型化"程序来提高工作效率,并且只有稍后重写组件才能保证一些低级代码。但是,通常,一旦它在脚本中工作,就根本不需要执行任何其他操作。

Ruby 文档描述了启动一个单独的进程并将其视为文件。这很容易!一个好的开始是 Linux 编程的艺术关于程序模块化的介绍性段落。这本书也是一个很好的例子,使用linux的标准流编辑器,称为sed,你现在可以从Ruby使用它。

如果您需要解析或编辑大量文本,那么许多解释器或编辑器已经围绕 sed 的功能编写。此外,如果你不懂C,它可能会节省你写一些超级高效的东西的精力。

相关内容

  • 没有找到相关文章

最新更新