【问题标题】:Build system that is not file-centric构建不以文件为中心的系统
【发布时间】:2013-03-08 05:10:26
【问题描述】:

我们的软件基础架构非常类似于软件构建系统:信息从不同来源收集并用于生成一些输出。与传统软件构建一样,我们有不同类型的输出、依赖树等。

主要区别在于我们的来源、中间结果和输出不是天生基于文件的。相反,它们是(唯一可寻址的)数据对象。

现在,我们正在结合传统的构建系统 (SCons) 将我们的数据结构映射到文件和目录,但这并不能扩展,无论是 w.r.t。性能,但(更重要的是)w.r.t.可维护性。因此,我正在寻找一种从头开始为此目的而构建的基础架构。

作为示例,假设您有 3 个 XML 文档 ABC。假设B/foo/bar 是从A/x/yA/x/z 计算出来的,同样C/a/b 是从A/x/y 计算出来的。我需要一个基础架构来

  1. 实现这些关系(即转换及其依赖关系)
  2. 更改后自动重新构建相关部分

使用文件的一个主要问题是,如果我将 ABC 映射到某些文件 A.xmlB.xmlB.xmlC.xml 并使用传统的构建系统,那么 任何A.xml的更改将触发B.xmlC.xml的重建,即使A/x/yA/x/zB的原始依赖项)没有被修改。因此,对于细粒度的依赖解决方案,我需要将 ABC 中的每一个映射到一个目录,而不是一个文件,而是一个目录,其中每个子目录代表一个元素,文件代表属性等。正如我所说,这不适合我们。

(请注意,我们的系统实际上并不是基于 XML)

现在我正在寻找任何指向这个方向的现有软件、基础设施或概念,无论实现语言和底层数据结构如何。

【问题讨论】:

  • 听起来你想要一个支持 XML 的关系数据库
  • @JamesMohler:不是这样。我们的异构数据以各种供应商特定的文件格式存储。我们缺少的是描述部分数据的相互依赖关系并根据更改自动重新计算的好方法。另外,正如我所指出的,我只是以 XML 为例,我们的系统不是基于 XML 的。

标签: language-agnostic automation build-automation


【解决方案1】:

听起来您需要一个活动对象数据库管理系统 (ODBMS),例如 GemStone/S。 ODBMS 提供传统的持久性服务,没有将数据结构映射到文件的旧成本以及对象技术的众所周知的好处。正如您提到的依赖树和可寻址对象,在 ODBMS 中,导航引用被存储为其数据的一部分,允许表示/访问对象之间的任何复杂交互模式。当您预测使用继承、对象嵌套和交叉引用的系统时尤其如此。

虽然对象引擎看起来可能超出您的要求,但在并发和多用户环境中,大型生产业务系统通常使用 OODBM 存储和执行方法。它不是免费的,因为您必须在等式的人为部分(教育和经验)上进行投资,但是一旦克服了最初的恐惧,就会获得投资回报。

对于在进行更改(来自播音员的通知)后重新构建(订阅)部分,您可以使用 Observer design pattern 或其变体之一(SASEAnnouncements framework)来实现您的公告/订阅建筑学。正如您已经注意到的那样,在这种类型的事件框架下,存在传统的基于文件的解决方案难以解决的内在问题。例如,依赖机制通常管理一个对象的替换,或者在您的示例中,一个 XML 文档被另一个替换。任何现代事件框架都应该在删除对象时进行管理,插入旧对象的所有依赖项都会更新为新引用。

最后,有一个免费的GemStone/S stack 包含对象依赖框架,因此您可以尝试使用真正的对象数据库。

【讨论】:

  • 我曾简要研究过 ODBMS,但我的印象是它们的预期用例与我们的并不完全匹配。谢谢,不过,我会再看一下链接。
  • 这最接近我们所追求的。谢谢!
【解决方案2】:

所以没有什么可以完全解决您的问题,但是有一些工具可能会让您比现在更接近:

1) 您也许可以使用 Fuse 将一些东西放在一起,这样您就可以更好地控制数据对象如何映射到文件。 Fuse 基本上允许您从所需的任何支持数据构建任意文件系统。 (python bindings 非常友好,但也有许多其他语言界面可用)。然后,您可以使用传统的构建工具,并利用与您的数据更好地关联的文件类对象。

2) Cmake 有一种非常可扩展的语言来编写自定义目标,您可以将其投入使用。不幸的是,它的语言非常具有指导意义,而且学习曲线有些陡峭,所以它不是我的首选。

【讨论】:

  • FUSE 是一个我们没有想到的有趣选项。关于 CMake,我会看一下,但如果可以避免的话,我宁愿不向我们的池中添加另一种特定于工具的语言。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
相关资源
最近更新 更多