1

私が働いている会社には、「複雑な」ファイルベースのバッチプロセスがたくさんあり、次のような一連のファイルがあります。

  • ファイルAを取る
  • ファイル B をフェッチする
  • ファイル A のフィールドをファイル B に結合してファイル C を作成する
  • ファイル C でいくつかのヒューリスティックを実行して、ファイル D を作成します
  • ファイル D をサーバー X にアップロードする
  • ファイル D と A に基づいてレポートを作成し、それを user.name@example.com にメールで送信します

各ステップの実行には何時間もかかる場合があります (ファイルには数十億行のデータが含まれる場合があります)。while は、GNU Makefile と一緒に接着されており、次のようなセクションがあります。

fileC: fileD run-analysis $^ > $@

Makefile は、ステップ間の依存関係をモデル化するのに役立ちます。また、特定のステップの後のすべてを繰り返すこともできます (ステップに問題がある場合、またはヒューリスティックが変更された場合など)。

Makefile を使用することは、バッチ プロセスを実行するためではなく、ソフトウェアを構築するためのものであるため、私には常に悪いように思えます。また、Makefile は、いかなる形式のテスト フレームワークも提供しません。

私の質問は、これらのような大きなシーケンスの大規模な操作をどのように調整するのですか?

4

3 に答える 3

6

Makefile は、ソフトウェアのビルドに使用できます。
しかし、彼らはその活動に限定されません。

Makefile は、多くのことを順序付けるのに役立ちます
これには、テスト フレームワークが含まれます

Makefile ベースのビルド、テスト、インストール シーケンスを使用しましたか? Makefile を作成するためのツール
があります。

ここにいくつかの邪魔にならない使用法があります、

上のstackoverflow内の他の参照、

于 2009-06-24T15:20:17.870 に答える
4

実際、Makefile はこの種の作業に非常に適していて、非常に広く使用されています。それらは、依存関係の追跡に関係するあらゆるものに使用できます (makefile として実装されたエキスパート システムについての逸話を聞いたことがあります)。Gnu make は、複数のジョブを並行して実行できます。

代替手段は Control-M などのエンタープライズ スケジューリング ツールであるため、makefile についてあまり心配する必要はありません。これらのツールは次のとおりです。

  • はるかに複雑

  • 非常に高価

  • かなり不透明で、メイクファイルよりもテストがやや難しい

  • テストできるようにローカルマシンにセットアップするのは政治的に困難です。

よほどの理由がない限り、makefile をそのまま使用してください。エンタープライズ システム管理ツールは、数百または数千の異種システムを含む非常に大規模なインストールがある場合に役立ちます。その規模で運用している場合を除き、そのようなツールを使用しない十分な理由があります。

ハイエンドの「エンタープライズ」システムに対する主な議論は、このタイプのインフラストラクチャを展開すると、これらの「エンタープライズ」システムを実行する方法に関する神聖な知識に宿営するハイエロファントの内なる聖域に力を与える傾向があるということです。このプロセスは、経営学の文献では「帝国の構築」として知られています。異議を唱えられた場合、帝国の建設者は、彼らが特別な知識を持っていること、および単なる人間が理解するにはあまりにも洗練されている「エンタープライズ」システムで何かを行う資格がある人は誰もいないことをほのめかして、科学で管理を簡単に盲目にすることができます.

「エンタープライズ アーキテクチャ」の官僚主義は、ツールに精通していない限り、議論するのが非常に難しい場合があります。Makefile はよく知られている、誰もが使用できるツールです。Makefile については対等な立場で議論することができます。

メイクファイルに固執します。それはろくでなしを正直に保ちます。

于 2009-06-24T16:34:06.497 に答える
0

ファイル内のデータがファイル構造を超えていますか? ファイル内のデータが適切に構造化されている場合は、おそらく新しいデータ ソースについて考え始めるときです。

ただし、ファイル A と B をデータベース内の適切に構造化されたデータに置き換えることは選択肢ではないと感じています。これはどう:

  1. ファイル A とフェッチされたファイル B から構造化データを一連のリレーショナル データベース テーブルに読み込みます。
  2. テーブルから結合を実行して、別のテーブル (またはメモリ内) にデータを作成します。
  3. 必要なヒューリスティックを実行する
  4. 結果のデータから出力ファイル D を作成します。
  5. 結果データと初期データからレポートを作成します。

ステップ 1 と 4 はまだ遅くなりますが、実際の処理により効率的なデータ構造を使用することで、プロセス全体を高速化できると確信しています。

データベースを操作する利点は、結合/処理ルーチンを作成する際に、より多くのプログラミング オプションを使用できる (好きな言語を選択する) ことです。make ファイルだけに頼る必要はありません。

于 2009-06-24T15:22:26.710 に答える