构建不以文件为中心的系统

2023-12-19

我们有一个软件基础设施,其工作方式与软件构建系统非常相似:从不同来源收集信息并用于生成一些输出。就像在传统的软件构建中一样,我们有不同类型的输出、依赖树等。

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

现在,我们正在结合传统的构建系统(SCons)将数据结构映射到文件和目录,但这无法扩展,无论是w.r.t还是。性能,但(更重要的是)w.r.t.可维护性。因此,我正在寻找一个专门为此目的而构建的基础设施。

作为说明,假设您有 3 个 XML 文档A, B and C。这么说吧B/foo/bar是计算自A/x/y and A/x/z,并且类似地C/a/b计算自A/x/y。我需要一个基础设施来

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

使用文件的一个主要问题是,如果我映射A, B and C到一些文件A.xml, B.xml and C.xml并使用传统的构建系统,然后any改成A.xml将触发重建B.xml and C.xml, 即使A/x/y and A/x/z(原来的依赖关系B) 不被修改。因此,为了实现细粒度的依赖关系解析,我需要映射每个A, B and C不是文件,而是一个目录,其中每个子目录代表一个元素,文件代表属性等。正如我所说,这对我们来说无法扩展。

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

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


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

尽管对象引擎对于您的需求来说可能显得过大,但大型生产业务系统在并发和多用户环境中使用 OODBM 存储和执行方法是很常见的。它不是免费的,因为你必须投资于人的部分(教育和经验),但一旦克服了最初的恐惧,它就会带来投资回报。

对于更改(来自播音员的通知)后重建(订阅)的部分,您可以使用观察者设计模式 http://en.wikipedia.org/wiki/Observer_pattern,或其变体之一(SASE http://www.object-arts.com/downloads/papers/ExtendingSUnitToTestSASEEvents.pdf or ),实现您的公告/订阅架构。正如您已经注意到的,在这种类型的事件框架下,存在一些难以用传统的基于文件的解决方案解决的固有问题。例如,依赖机制通常用于管理对象(或者在您的示例中是 XML 文档)被另一个对象的替换。任何现代事件框架都应该在删除对象时进行管理,插入旧对象的所有依赖项都将更新为新引用。

终于有免费的了宝石/S 堆栈 http://seaside.gemstone.com/downloads.html其中包括对象依赖框架,因此您可以尝试真实的对象数据库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构建不以文件为中心的系统 的相关文章

  • 如何查看点击 HTML 按钮时发出的 POST 请求的地址?

    我正在创建一个涉及网络抓取和网络自动化的项目 我想首先提交此表格 http rgsntl rgs cuhk edu hk rws prd applx2 Public tt dsp timetable aspx http rgsntl rgs
  • PowerShell脚本将标签值从一个文件替换到另一个文件(标签值)

    我需要使用 powershell 脚本将标签值从另一个文件替换到一个文件中 Example File A
  • 从关系数据库中“区分”对象

    我们的 win32 应用程序根据 MySQL 关系数据库中多个表中的数据组装对象 对于这样的对象 多个修订版本存储在数据库中 当存储某些内容的多个修订版本时 迟早您会问自己这样的问题 您是否可以想象两个修订版本之间的差异 所以我的问题是 比
  • 用矩阵变换 3D 向量的方法

    我一直在阅读一些关于用矩阵转换 Vector3 的文章 并且正在努力深入研究数学并自己编码 而不是使用现有代码 无论出于何种原因 我的学校课程从未包含矩阵 所以我正在填补我的知识空白 值得庆幸的是 我认为我只需要一些简单的东西 背景是我正在
  • 查找两个大小为 n 的数组中第 n 大数的算法

    我有这个问题 给定两个大小为 n 的排序列表 存储在数组中 找到 O log n 计算并集中第 n 大元素的算法 两个列表 我可以看到这里可能有一个技巧 因为它需要第 n 个最大的元素 并且数组的大小也是 n 但我不知道它是什么 我在想我可
  • 自动部署资源

    我足够了解我们需要通过单个用户操作来部署我们的应用程序 但是 我don t know 在 NET 商店中可以使用哪些好工具 您如何管理每个环境的配置更改 有人可以给我指出一些用于持续集成的好资源吗 我希望看到一些理论以及逐步的实践指南 Ed
  • 组合 min() 和 max() 的函数是否有“规范”名称?

    我发现我经常最终编写一个我总是调用的函数 clamp 这是一种组合min and max 该函数有标准的 规范 名称吗 它总是看起来像这样 function clamp val lower upper if val lt lower ret
  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec
  • 如何为所有语言创建字母数字正则表达式?

    我今天遇到了这个问题 此正则表达式仅匹配英语 a zA Z0 9 如果我需要支持这个世界上的任何语言 我应该编写什么正则表达式 如果您使用字符类简写和 Unicode 识别正则表达式引擎 您就可以做到这一点 这 wclass 匹配 单词字符
  • 关于如何使用 selenium webdriver 自动执行 google 电子表格的示例 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 这只是一个知识共享示例 这是我使用 selenium webdriver 通过 gmail 实现 google 电子表格自动化的示例 pac
  • 安全网络登录示例/教程[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 为 Web 应用程序创建登录表单的方法有很多种 但大多数方法都存在这样或那样的缺陷 密码以明文形式传输
  • WatiN 还是 Selenium? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 编程语言之间的关系

    我想知道以下问题 这是什么意思 有些语言是 另一个的子集 超集 http www c2 com cgi wiki ForeignFunctionInterface 能 是用数学来定义的吗 是吗 与子集 超集相关 初等集合论中的概念 几乎所有
  • 自动化发布 Android 应用程序的过程

    我们有几个Android应用程序 发现每个版本上传应用程序的过程都是通过Android 开发者网站 https play google com apps publish slow and 无效的 我们喜欢使该过程自动化 更明确地说 我们可以
  • Android 报告“Error=Unable to find Instrumentation info for: ComponentInfo {}”

    stackoverflow 上有很多关于这个问题的主题 问题 例如错误 无法找到以下仪器信息 ComponentInfo https stackoverflow com q 21294945 513413 和其他网站 但使我的问题与其他网站
  • 如何计算某物是否位于某人的视野中

    我有一个对象 它在 2D 空间中具有位置和速度 两者都由向量表示 对象的视野每侧均为 135 度 它看起来与移动的方向相同 速度矢量 我有一些对象 其在 2D 空间中的位置由向量表示 在图中 蓝色背景上的对象是可见的 红色背景上的对象对主体
  • 如何检查 AJAX 请求的真实性

    我正在设计一个网站 让用户尽快解决谜题 JavaScript 用于为每个谜题计时 当谜题完成时 毫秒数通过 AJAX 发送到服务器 如何保证服务器收到的时间不是用户伪造的 我不认为基于会话的真实性令牌 Rails 中用于表单的那种 就足够了
  • 识别鼠标移动的算法

    我想知道是否有任何研究 算法可以指定鼠标在识别 等字符时的偏差量使用鼠标绘制 某种光学字符识别 但可能是一个更简单的版本 是否有某种算法可以让我说用户绘制的问号确实是一个问号 而不是其他具有一定准确性的东西 就像 Windows 平板电脑软
  • 如何在RobotFramework中进行多行测试设置或拆卸而不创建新关键字?

    我需要在测试用例中调用两个拆卸关键字 但不能为此创建新关键字 我很有趣 如果有这样的关键字语法 例如文档或循环 Documentation line1 line2 line3 使用 运行关键词 http robotframework org
  • 错误:无法创建新会话,因为找不到需要 HttpClient、InputStream 和 long 的“createSession”

    我正在尝试自动化 Android 混合应用程序 但出现以下错误 1 线程 main org openqa selenium WebDriverException中出现异常 无法创建新会话 因为未找到需要 HttpClient InputSt

随机推荐

  • 在 TextBlob 中使用翻译功能时出现“HTTPError: HTTP Error 404: Not Found”

    当我尝试在 jupyter 笔记本的 TextBlob 库中使用翻译函数时 我得到 HTTPError HTTP Error 404 Not Found 我在这里发布了我的代码和错误消息的屏幕截图以供参考 5 6 天前 当我第一次运行完全相
  • 改变statusStrip的高度

    我在VS2010中有一个带有statusStrip的简单Windows窗体 无论我尝试什么 statusStrip的高度都没有改变 改变高度的正确方法是什么 thanks 我刚刚更改了 StatusStrip 大小 没有出现问题 创建一个新
  • 无法推断通用参数“T”

    我正在重构我的代码并添加对 Swift 的支持generics 我遇到了编译器错误 我的代码是 func dequeueReusableViewController
  • Passport 和 connect-flash:req.flash 不是函数

    我在学flash消息输入passport并在运行我的脚本时遇到此错误 req flash is not a function 这是我的配置 var flash require connect flash app use flash pass
  • 替换 Query 对象的 my 字段时,缓存数据可能会丢失

    这是我的代码 const NewVerificationCode gt const loading error data refetch useQuery CONFIRMATION CODE skip true onError err gt
  • ASP.NET 客户端到服务器的通信

    您能帮助我了解 ASP NET 中从浏览器到客户端进行通信的所有不同方式吗 我已将其设为社区 wiki 因此请随意编辑我的帖子以改进它 具体来说 我试图通过列出每种方法的工作原理来了解在哪种情况下使用每种方法 我对 UpdatePanel
  • 如何在java中正确格式化JSON字符串?

    我有一个球衣客户端 它从源获取 JSON 我需要将其转换为格式正确的 JSON 通过 http 请求抓取时 我的 JSON 字符串如下所示 properties someproperty aproperty set of data keyA
  • SignInManager.ExternalSignInAsync 与 Facebook 始终返回失败

    Google 可以工作 但 Facebook 总是返回失败 当我检查 loginInfo 时 它显示已验证 true 这是 Startup Auth cs 中的代码 我包含了有效的 Google 代码 public void Configu
  • 如何对岩石等复杂图像进行分割(C++)

    我正在尝试对岩石图片进行分割 我已附上示例 最终目标是找到近似的岩石区域 不确定所需的方法是否是图像分割 我尝试过几种算法 纹理分割没有帮助 因为所有的岩石都是相似的 我可以得到有很多错误的边缘 由于阴影 虽然可以使用 Here is an
  • Visual Studio UML 类图生成器

    我想知道是否有一个软件可以从 Visual Studio 2008 Professional 中的项目文件 C 生成 UML 类图 就像某种插件 我查了以前的帖子 乍一看没有看到任何有用的东西 编辑 我找到了类图项目 但愿意接受更多提示 编
  • 表的每一行的字符串偏移“Data_length”/“Index_length”非法

    学习 PHP mySQL 等 当我使用 xampp 使用 phpmyadmin 创建表时 每一行都会出现此错误 libraries classes Controllers Table TableStructureController php
  • 使用 Powershell 删除重复文件

    我有几千个重复文件 例如 jar 文件 我想使用 powershell 来 递归搜索文件系统 查找重复项 仅通过名称或校验和方法或两者兼而有之 删除除一个之外的所有重复项 我是 powershell 的新手 我将其扔给可能能够提供帮助的 P
  • JQuery 添加点击事件到单选输入文本

    我想要与单选按钮 热门 相关的标签 我开始使用 siblings 方法来实现这一点 我想一定有更好的方法 单选按钮上的单击事件如下所示 RadioButton click function event var questionId this
  • 从 C (Visual Studio) 调用 C++ 类成员函数

    我需要从 C 程序调用 C 成员函数 我在 C 代码中创建了 cpp h 包装器文件 包装了 C 成员函数 即 wrapper cpp include wrapper h extern C void wrap member1 Class m
  • 超出范围

    理想情况下 我想这样做 w 4px media max width 900px r 3px media min width 900px r 5px myclass border radius w r 这不会编译 因为 r没有在我定义的范围内
  • C#中检查线程是否正在运行

    我在 C 代码中创建了一个名为 ZipFolders 的函数 事实上 我是从 Unity 按钮调用它的 当按下它时 尝试将文件夹压缩到目录中 因为同时我想做其他事情 所以我尝试在新线程中调用该函数 我的问题是如何检查该线程是否正在运行或已停
  • 如何处理 JavaScript 中的“未定义”[重复]

    这个问题在这里已经有答案了 可能的重复 检测 JavaScript 中未定义的对象属性 https stackoverflow com questions 27509 detecting an undefined object proper
  • 为什么 Google Analytics 事件不从 onSubmit 发送?

    我想跟踪用户使用 Analytics 事件下载文件的频率 但即使事件似乎已发送 跟踪 gif 似乎并未正确到达 要下载文件 用户需要填写一份简短的表格 输入到此表单中的信息由该功能检查checkSubmit 返回false当输入的信息无效或
  • 如何在加壳器配置期间将文件复制到主机?

    我想在打包程序配置期间生成公共 私有 ssh 密钥对并将文件复制到主机 有没有办法使用打包程序将文件从虚拟机复制到主机 我想到了 文件提供程序有一个 方向 选项 允许下载而不是上传 type file source app tar gz d
  • 构建不以文件为中心的系统

    我们有一个软件基础设施 其工作方式与软件构建系统非常相似 从不同来源收集信息并用于生成一些输出 就像在传统的软件构建中一样 我们有不同类型的输出 依赖树等 主要区别在于我们的来源 中间结果和输出本质上并不是基于文件的 相反 它们是 唯一可寻