プログラマ ずんべ の日記

zunbe

プログラマ ずんべ の日記
プログラマ ずんべ の日記

探し物は見つかりましたか? サイト内検索を試してください。


<<先頭] [<前へ] [ 1  2  3  4  5  6 ]

【若いモンの発想はわからん】(その2) 数ギガバイトのデータを読むんだぞ

(その2) 数ギガバイトのデータを読むんだぞ

今日、こんな事があった。

簡単なフィルタ・プログラムを社員に書かせたんだな。
仕様はこうだ。

(1).標準入力からデータを取り込み、標準出力に出力する。
  まぁ、フィルタだから、当然ですな。
(2).データは数百メガバイト~数ギガバイトもありうる。

この仕様で、社員が書いたプログラムは、こうだ。

-----
@idata = ();
foreach $line (<STDIN>)
{
  push(@idata, $line);
}

@odata = ();
foreach $line (@idata)
{
  # フィルタ処理

  push(@odata, $line);
}

print @odata;
-----

こんなプログラムで何百メガも読み込ませたら、あっという間にマシンはパンクだ。
プログラムをよく見ると、エラー出力も、全部溜め込んで、最後に出力しているようだ。
ダメだ…。

メモリをバカ食い。
パイプラインを組んでも並列処理されない。
エラーで落ちても、何もエラーが残らない。もちろん、原因究明もできない。

まったく。
どうして、こういう発想になるのだろうか。



このエピソードはいかがでしたか?

投稿者 zunbe : 2005/07/20 00:59:52 | コメント (0)

2005/07/15

【若いモンの発想はわからん】(その1) どのファイルを処理するべきか

(その1) どのファイルを処理するべきか

今日、こんな事があった。

簡単なバックアップのプログラムを社員に書かせたんだな。
仕様はこうだ。

(1).ファイル名は「YYYYMMDDHHNNSS.*」
(2).ローカルにあるファイル群を、他のサーバにFTPでアップロードする。
(3).指定期間以上経過したフバックアップァイルは、ローカル、サーバとも削除する。
(4).アップロード先のサーバに、既に存在しているファイルはアップロードしない。
(5).ファイルの日付は、ファイルのタイムスタンプではなく、ファイル名を用いる。

さて、社員がプログラムを作っているとき、こんな指示を出した。

・削除対象のファイルや、アップロード対象のファイルは、ファイル名にある日付で決めるのだから、以下の様に組みなさい。
「ファイルの一覧を取得した後、取得した一覧をファイル名でソートし、ソートした一覧の先頭から順に処理していき、日付が指定期間外になったところでループを終了しなさい。」

当然こうなりますな。
予めファイルの一覧を日付でソートしておいて、順に処理していけば、指定期間外になったところで、ループを終了すればいい。
それ以降に、指定期間内とマッチする事はありえないからだ。

ところが、うちの社員は仕様(4)でこれをやりおった。
サーバ上のファイルを走査して一覧を取得してファイル名でソート、その上で順位走査を行い、ローカルにあるファイルと突合せし、存在しているファイルを一覧から削除するというコードを書いた。
ところが、なぜか、「ファイルが存在していない」事を検出した時点で、その後の走査を打ち切り、それ以降は、全部アップロード対象とするコードになっていた。

こらこら、ファイルの存在の有無を検査するのに、なんで、日付が関係あるねん。
ファイルの日付に関係なく、「存在していないものをアップロード」しなければならないのに、何で「日付でソート」→「順にループ」→「ファイルが存在していないで終了」になるねん。
すべてのファイルを走査して、有無を検査しなきゃいかんだろうが。

まったく。



このエピソードはいかがでしたか?

投稿者 zunbe : 2005/07/15 01:10:16 | コメント (5)



<<先頭] [<前へ] [ 1  2  3  4  5  6 ]