软件工程:在Unix中结合许多模块化程序

时间:2014-03-07 06:27:44

标签: mysql database unix software-packaging

我的问题是:是否有任何标准/通用方法来实现维护和更新MySQL数据库的软件包

我是一名本科研究助理,我的任务是创建一个更新我们大学内部生物信息学数据库的cron工作。

我没有构建完成工作各个方面的单片二进制文件,而是将问题划分为子任务并编写了一些python / c ++模块来处理不同的任务,如下面的管道中所列:

  • 在远程数据库中查询更新文件列表,并返回给定时间间隔的结果(每月更新文件/每周/每日);
    • 在python中实现的模块。更新文件的URL输出到stdout
  • 读入更新文件的相对网址并下载到本地目录
    • 以python实现的模块
  • 解压缩新文件的每个存档
    • 以bash脚本实现
  • 将文件解析为CSV格式
    • 用C ++实现的模块
  • 运行MySQL查询以将CSV文件插入数据库
    • 显然只是一个bash脚本

我不确定如何将这些模块组合到一个可以轻松移动到另一台机器的软件包中,比如说我们当前的服务器空间不足而且需要将数据库复制到另一个文件系统(它是已经发生过一次)。

我的第一个想法是创建一个bash脚本,将所有这些模块组合在一起,因为无论如何它们都以stdin / stdout运行,但这似乎是一种奇怪的处理方式。

或者,我可以将我的C ++代码编写为python扩展,将所有这些脚本打包在一起,然后编写一个python文件来完成这项工作。

我应该使用软件包管理器,以便我的代码可以轻松安装在不同的机器上吗?包含makefile的整个更新程序的简单zip存档是否足够?

我对数据库管理非常陌生,而且我没有很多分发软件的经验,但我想做好这个项目。感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

进程间通信(IPC)是将许多不同程序组合到复杂应用程序中的标准机制。 IPC包括使用套接字(例如,从一个应用程序向另一个应用程序发出HTTP请求或通过TCP流发送数据),使用命名的FIFO和其他机制将一个程序的输出管道输出到另一个程序的输入。无论如何,使用Bash脚本来组合这些不同的元素(或类似地,编写一个与子进程模块完成相同的Python脚本)将是完全合理的。我用这种方法指出的唯一一点是,由于您正在读/写数据库,因此您确实需要考虑使用此方法的安全/身份验证(例如,任何可以调用此应用程序的人都可以写入数据库?如何验证调用者是否具有适当的访问权限。

关于发布,我要说最重要的是确保您可以在任何给定版本和先前版本中找到所有组件及其依赖关系的快照。发布。您应该设置代码存储库(例如,在GitHub或您信任的其他服务上),并在每个版本时创建一个发布分支,其中包含此版本发布时所有工具的快照。这样,如果,上帝保佑,您安装工具的唯一机器失败了,您仍然可以立即获取代码的副本并将其安装在新机器上(如果出现故障,您将会能够回到早期版本和二进制搜索,直到找到破损发生的位置)

在安装方面,它实际上取决于涉及的步骤数量。如果它像解压缩文件夹一样简单,并确保文件夹位于PATH环境变量中,那么创建任何特殊的分发机制可能不值得(除非您能够轻松完成)。但是,我建议您清楚地记录存储库中INSTALL或README文档中的安装步骤(以便快照说明)以及存储库的网站上的安装步骤。如果步数很小而且很容易实现,那么我就不会费心了。如果涉及许多步骤(如下载和安装大量依赖项),那么我建议编写一个可以自动执行安装过程的脚本。话虽这么说,但这确实与大学在这种情况下的需求有关。