• 締切済み

Perlについて

処理速度について質問です。 ファイルを大量(4000~8000程度)に扱う処理でディレクトリ内にあるファイルを  「-f $file」 で検索する処理ありますが、 ファイルが8000あったとして、半分づつディレクトリを分けて検索した場合、 処理速度は変わるでしょうか? ※この処理は 2万~3万回/1日 は実行されます。

  • dyo
  • お礼率1% (12/711)
  • Perl
  • 回答数2
  • ありがとう数0

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

一応確認だけど, 質問内容は 8000個あるファイルを*全部検索するのは同じだけど* 1つのディレクトリに入れる方がいいのか, それとも複数のディレクトリに入れる方がいいのか ということでいい? もしそうなら「各ディレクトリを複数のメディアに分散し, かつ複数のスレッドを同時実行すれば速くなるかもしれない」くらいかなぁ. ちょっと想像する限り, 「分割した各ディレクトリを 1つのメディアに入れる」とか「1スレッドで処理をする」とかでは何をどう頑張っても無意味に近いと思う. それよりは「ファイルを大量(4000~8000程度)に扱う処理」を「2万~3万回/1日 は実行」するのをなんとかした方がはるかに賢い気がする. まあ, そもそも質問のタイトルからして何とかならないものかねぇ.

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

OS次第、ファイルシステム次第でしょう。 現在の主なファイルシステムでは、大量のファイルでも極端に遅くならないような工夫が入っています。 ファイルが少ない方が早いかもしれませんが、数が半分になったらパフォーマンスが倍になる、等の単純なものではありません。

関連するQ&A

  • ファイル操作について

    例えば1つのディレクトリに10万個の画像があった場合に、同じディレクトリ内にperlで新しい画像を作ったり削除したりすると、処理速度が遅くなってしまいます。(作成や削除に時間がかかったりする) 違うディレクトリではスムーズに画像を作成したり、削除したりできるのですが、大量のファイルがあった場合は遅くなってしまうようです。 perlでファイルを作ったり削除するのに、ファイル数が多いからという理由で速度が遅くなるものでしょうか。 また、何か対策をご存知であれば教えていただけると嬉しく思います。 よろしくお願いします。

  • Perlでのファイル処理について質問です.

    あるディレクトリの中に a.pl b.pl c.pl d.pl e.pl という5つのファイルが入っているとします.そのとき,一気にこの5つのファイルを実行するにはどうすればいいのでしょうか? とても初歩的な質問かもしれませんがお願いします.実際は100個くらいファイルがあるのでひとつひとつ実行するのはとても面倒で...

    • ベストアンサー
    • Perl
  • perl(CGI)から作成したディレクトリがFTPで消せないのはなぜ?

    HTMLページからそのCGIを叩くと『年月』の名前のディレクトリを作って、 その中に日毎のアクセスログファイルを作成するCGIを作っています。 ディレクトリを作成するパールは以下です。 mkdir($dir, 0777); しかし実行すると$dirのパーミッションは755になってしまいます、 その中に作成されるファイルは正常に作成されるのですが、 そのディレクトリ/ファイル共にFTPから削除/パーミッションの変更が 出来なくなってしまいます。 telnetから入って削除しようとしても普通のユーザー権限では無理で 削除する為にはルートにならなければなりません。 なぜでしょう?FTPから操作できる権限のディレクトリを作る方法が あるのでしょうか? バカな質問だと思いますが分かる方がいらっしゃいましたら教えて下さい。

    • ベストアンサー
    • Perl
  • 古いファイルを含むディレクトリのリネーム

    古いファイルを含むディレクトリのリネーム Linuxサーバのファイル整理の目的で 指定ディレクトリ以下の階層の複数フォルダについて 古い画像ファイル(90日以上変更がない".jpg"ファイル)しかないものは (1)ディレクトリ名をリネーム(ディレクレトリ名末尾に"_deleted"を追加) (2)ディレクトリ内の古いファイルを削除 したいと考えております。 find と xargs をつなげてあげれば、(2)単体であればできるのですが ex.) find . -type f -ctime +90 -print0 | xargs -0 rm 「格納されている全てのファイルが対象となる場合」に「ディレクトリ名をリネームして」 という処理で悩んでおります。 皆様、アドバイスの程お願い致します。 ========================================== 環境: ========================================== OS: CentOS5.4 bashなどを利用して,簡易的に実行できればと考えております。

  • perlでアドバイスをお願いします。

    あるテキストファイルが以下の内容で記述されているとします。 a   file1 a   file1 a   file1 b   file1 b   file1 b   file1 c   file2 c   file2 d   file2 d   file2 e   file2 e   file2 f   file3 f   file3 f   file3 上記のように列が二つあるテキストファイルについて、 2列目のfile名が1列目のどの値とひもづいて いるかを処理するperlプログラムを作ることを考えます。 出来上がったperlによって上記テキストファイルを処理した結果は、 file1は aとb file2は cとdとe file3は f とひもづいていることが分かる ということにしたいです。 これをperlプログラムで書くとき、条件として 一行一行を読みとるとき if ( $_ =~ /(\S+)\s+(\S+)/ ){ を使っています。 そのため$1と$2に現在行の1列目,2列目が与えられた後、 ハッシュと配列を組み合わせて考えた場合どのようにすれば いいのでしょうか。 また仮にテキストファイルの続きが存在し、 1列目がg 、2列目がfile1 の行があるとき 2列目で既に出てきた同じfile名はエラーとすることも考えた 場合どう記述するのか合わせてお願い致します。 長くなってしまい申し訳ないのですが、 ご指導ご鞭撻宜しくお願い致します。

  • perlのローカルプログラムでディレクトリのアクセス権を取得したい

    お世話になっています。 Linux上で動作するperlのプログラムを作成しています。(ローカルプログラムでCGIではありません。) このperlプログラムであるバイナリファイルを分割して別のディレクトリにコピーさせようとしているのですが、コピー先のディレクトリにプログラム実行ユーザーの書き込み権限があるかを調べたいと思っています。 ネットで調べたのですがこのような処理が出来るのかどうかも不明です。 もし、ご存知の方がおられましたらディレクトリの書き込み権限を調べる方法を教えていただけないでしょうか? ヒントでもけっこうですのでよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • Perlのmyとourについて

    myとourの違いが、飲み込めません。 以下、当方の環境とします。 【コード(1) ファイル名は read.pl とする】 #!/bin/perl use strict; use warnings; my @filelist = <abc*.log>; foreach my $i (0 .. $#filelist){ open(IN, "$filelist[$i]"); my @alltxt = <IN>; sub f_readlines { my $export=0; foreach my $strings(@alltxt){ $export .= $strings; } return $export; } 【コードの説明と前提】 これは、read.plを実行すると、同じディレクトリにある、「abcで始まり .logで終わるファイル」のすべてを引数として、 同じ処理を繰り返すコードです。 実行時のカレントディレクトリには、abc001.log、abc002.log、abc003.logという3つのファイルが存在します。 abc001.log には aaaaaaa という文字列が書き込まれています。 abc002.log には bbbbbbb という文字列が書き込まれています。 abc003.log には ccccccc という文字列が書き込まれています。 【コード(1)の実行結果】 $ ./read.pl aaaaaaa aaaaaaa aaaaaaa 【現状と当方の考え】 このコードの本来の目的は、存在するファイルの数だけ、その中身を順次読みだす、というものです。 ですので、コード(1)の実行結果は $ ./read.pl aaaaaaa bbbbbbb ccccccc になってくれないといけないのです。 しかし、 my @alltxt = <IN>; の行を our @alltxt = <IN>; に書き換えると、うまくいきました。 ネットを見ていると、myはスコープの範囲が限定的で、ローカルな変数のようで、 グローバル(どこでも変数として取り出せる)なものが our、というように読み取れます。 foreach の処理の中で宣言した my @alltxt ですから、 ファイルの数だけ、毎回 @alltxt の中身の値は変わるはずです。 それが、変わってくれず、初回に@alltxtに読み込んだ aaaaaaa だけが、ファイルの数だけ 出力されてしまいます。 【質問したいこと】 (1)myを使って代入した変数の中身は、同じスコープ内で作成した関数からは読みだせないのか? (2)それならば、なぜ初回のaaaaaaaは、読み出せているのか? 以上よろしくお願いします。

  • MySQLのチューニングについて

    チューニングについて質問です。 1. SQLの純粋な実行速度を知るにはどうしたらよいか 2. SQLの叩かれる回数が多い場合にレスポンスが遅くなるのはどう対応すればよいか 1については、純粋に単体での実行時間が知りたいのですがSQLのキャッシュが残っているせいか、高速に処理されてしまうために、なかなか正確な時間が分かりません。 どのようにしたら単体での実行速度を計測できるのでしょうか。 2については、SQL単体ではなかなかの速度が出せているのに、そのSQLが短時間に大量に呼び出される場合に、サーバの負荷があがり、レスポンスが遅くなってしまう場合はどう対処すればよいのかを聞きたいです。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • perl system関数 引数 フォルダ

    perlのsystem関数を使って、コマンドを実行したいのですが、 実行ファイルの引数にフォルダを指定すると、うまく動作しません。 以下のように書いています system "実行ファイル フォルダ"; 実行ファイルは .BATファイルで、 指定しているフォルダには複数のテキストファイルが入っています。 perlで書いたcgiファイルは実行ファイルと同じディレクトリにあります。 コマンドからではなく、手動でドラッグ&ドロップすると正常に動作します。 windous7でperlはActivePerlを使用しています。 引数にはフォルダを指定できないのでしょうか? またフォルダを指定できない場合、解決策などはあるのでしょうか? よろしくおねがいいたします。

    • ベストアンサー
    • Perl
  • makefile のvpath

    makefile でvpathを指定してファイルを探索させる場合について質問です。 ファイルをmake が検索した結果、どこのディレクトリのファイル をmakeの処理で使用したかを確認したいのですが、どのようにしたらよいのでしょうか。 宜しくお願い致します。

専門家に質問してみよう