1

我工作的公司有许多“复杂”的基于文件的批处理,其中包含一系列文件,例如:

  • 取文件 A
  • 获取文件 B
  • 将文件 A 中的字段连接到文件 B 以生成文件 C
  • 对文件 C 运行一些启发式方法以生成文件 D
  • 上传文件 D 到服务器 X
  • 基于文件 D 和 A 构建报告并将其邮寄到 user.name@example.com

每个步骤都可能需要数小时才能运行(文件可能包含数十亿行数据)。while 东西与 GNU Makefiles 粘合在一起,其中包括以下部分:

fileC: fileD 运行分析 $^ > $@

Makefile 可用于对步骤之间的依赖关系进行建模,以及允许重复某个步骤之后的所有内容(如果某个步骤有问题,或者启发式方法已更改等等)。

使用 Makefile 对我来说总是很糟糕,因为它们用于构建软件,而不是运行批处理。此外,Makefile 不提供任何形式的测试框架。

我的问题是,您如何协调像这样的大型序列大型操作?

4

3 回答 3

6

Makefile 可用于构建软件
但是,它们不限于该活动。

Makefile 可以帮助对许多事情进行排序
其中包括测试框架

您是否使用过基于 Makefile 的构建、测试、安装顺序?
制作 Makefile 的工具

这里有一些不常用的方法,

stackoverflow 中的其他引用,

于 2009-06-24T15:20:17.870 回答
4

Makefiles 实际上非常适合这种事情并且被广泛使用。它们可以用于任何涉及依赖跟踪的事情(我听说过一个关于以 makefile 实现的专家系统的轶事)。Gnu make 可以并行执行多个作业。

您不应该对 makefile 过于担心,因为替代方案是企业调度工具,例如 Control-M。这些工具是:

  • 复杂得多

  • 非常贵

  • 相当不透明,比 makefile 更难测试

  • 在您的本地机器上设置政治上很难,因此您可以对其进行测试。

除非您有充分的理由不这样做,否则请坚持使用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 回答