7

この質問に対する回答を見てきましたが、どの回答が最も速く実行されるかわかりませんでした。これらは私が見た回答です。どれが最適ですか?

  1. each または each_line を使用して一度に 1 行ずつ読み取る
  2. gets を使用して一度に 1 行ずつ読み取る
  3. readlines を使用してすべてを行の配列に保存し、それぞれを使用します
  4. grep を使用します (grep で正確に何をすればよいかわかりません...)
  5. sed を使用します (sed で正確に何をすればよいかわかりません...)
  6. 他の何か?

また、別の言語を使用した方がよいのでしょうか、それとも Ruby でよいのでしょうか。

編集:

詳細: 各行には、「id1 attr1_1 attr2_1 id2 attr1_2 attr2_2... idn attr1_n attr2_n」(n は非常に大きい) のようなものが含まれており、それらをデータベースに挿入する必要があります。この例の行では、n 行をデータベースに挿入する必要があります。

4

2 に答える 2

4

Ruby は、最初の 3 つのオプションのディスクからの実際の読み取りを行うために、同じまたは非常に類似した低レベル コード (C で記述) を使用する可能性が高いため、同様に実行する必要があります。そのため、最も便利な方を選択する必要があります。それができるからこそ、Ruby のような言語はとても便利になります! ディスクから大量のデータを読み取るeach_lineため、読み取りごとに各行を使用して処理することをお勧めします。

grepsed、またはその他のそのような外部ユーティリティを画像に持ち込むことはお勧めしません。非常に正当な理由がない限り、コードの移植性が低下し、診断が困難な障害にさらされる可能性があるためです。

于 2013-02-01T22:11:52.053 に答える
2

Rubyを使用している場合は、パフォーマンスについて心配する必要はありません。この言語は、ファイルを1行ずつ読み取る反復アプローチに適しており、非常にうまく機能します。設計された方法で言語を使用している限り、通訳者にパフォーマンスについて心配させることができます。仕事は終わりました。

1つの特定のreadLargeFileFastメソッドが必要な場合、それはプログラムを何らかの形で本当に妨げているためであるはずです。ここで、それを実行するCプログラムを作成し、popenそれをrubyコード内の別個のプロセスとして記述します。これを呼び出してread_large.c、(おそらく)コマンドライン引数を使用して、動作方法を指示することができます。

これは、スクリプト言語が高速実行時間ではなく高速開発に使用されるという考えを支持しています。そのため、開発者は、Rubyのようなプログラムを迅速に「プロトタイピング」し、後でコンポーネントを書き直すだけで、低レベルのコードが必要になるため、非常に生産性が高くなります。ただし、多くの場合、スクリプトで機能するようになると、他に何もする必要はありません。

Ruby Docsは、別のプロセスを起動してファイルとして扱うことを説明しています。簡単です-簡単です!良いスタートは、プログラムのモジュール性に関するThe ArtofLinuxProgrammingの紹介段落です。この本はまた、 sedと呼ばれるLinuxの標準ストリームエディタを使用する素晴らしい例を示しています。これはおそらく現在Rubyから使用できます。

大量のテキストを解析または編集する必要がある場合は、sedの機能を中心に多くのインタプリタまたはエディタが作成されています。さらに、Cを知らない場合は、非常に効率的なものを書く手間を大幅に節約できます。良いのは、 BruceBarnettによるSEDの紹介です。

于 2013-02-01T21:21:04.290 に答える