我的首要问题是:是否有任何标准/通用的方法来实现维护和更新MySQL数据库的软件包?
我是一名本科生研究助理,我的任务是创建一个cron工作,更新我们大学的一个内部生物信息学数据库。
我没有构建在完成工作各个方面的单片二进制文件上,而是将问题划分为子任务,并编写了一些python/c++模块来处理不同的任务,如下所示:
-
在远程数据库中查询更新文件的列表,并返回给定时间间隔(每月更新文件/每周/每天)的结果
- 模块在python中实现。输出到stdout的更新文件的URL
-
读取更新文件的相对URL并下载到本地目录
- python中实现的模块
-
解压缩每个新文件的存档
- 实现为bash脚本
-
将文件解析为CSV格式
- 用C实现的模块++
-
运行MySQL查询将CSV文件插入数据库
- 显然只是一个bash脚本
我不知道如何将这些模块组合成一个可以轻松移动到另一台机器的包,比如说,如果我们当前的服务器空间不足,数据库需要复制到另一个文件系统(以前已经发生过一次)。
我的第一个想法是创建一个bash脚本,将所有这些模块管道连接在一起,因为它们无论如何都与stdin/stdout一起操作,但这似乎是一种奇怪的做法。
或者,我可以将我的C++代码编写为python扩展,将所有这些脚本打包在一起,只需编写一个python文件即可完成这项工作。
我应该使用包管理器,这样我的代码就可以很容易地安装在不同的机器上吗?一个包含makefile的整个更新程序的简单zip归档就足够了吗?
我对数据库管理非常陌生,在分发软件方面没有太多经验,但我想把这个项目做好。感谢您提前提供的帮助。
进程间通信(IPC)是将许多不同的程序组成复杂应用程序的标准机制。IPC包括使用套接字(例如,从一个应用程序向另一个程序发出HTTP请求或通过TCP流发送数据)、使用命名FIFO和其他机制,将一个程序的输出管道连接到另一个的输入。在任何情况下,使用Bash脚本来组合这些不同的元素(或者类似地,编写一个用子流程模块完成相同任务的Python脚本)都是完全合理的。使用这种方法,我要指出的唯一一点是,由于您正在对数据库进行读取/写入,因此确实需要考虑使用这种方法的安全性/身份验证(例如,任何可以调用此应用程序的人都可以向数据库写入吗?如何验证调用方是否具有适当的访问权限)。
关于分发,我想说,最重要的是确保您可以在任何给定的版本和以前的版本中找到所有组件及其在发布时版本的依赖关系的快照。您应该建立一个代码存储库(例如在GitHub或您信任的其他服务上),并在每次发布时创建一个发布分支,其中包含本次发布时所有工具的快照。这样,如果上帝保佑,你安装工具的唯一一台机器出现故障,你仍然可以立即获取代码的副本并将其安装在新机器上(如果出现问题,你可以返回到早期版本和二进制搜索,直到你找到损坏的发生地)
就安装而言,这实际上取决于涉及多少步骤。如果它像解压缩文件夹并确保文件夹在PATH环境变量中一样简单,那么创建任何特殊的分发机制可能都不值得麻烦(除非您能够轻松做到这一点)。不过,我建议您在存储库中的INSTALL或README文档中清楚地记录安装步骤(以便对说明进行快照),并在存储库的网站上进行记录。如果步骤的数量很小并且很容易完成,那么我就不会再花太多时间了。如果涉及许多步骤(如下载和安装大量依赖项),那么我建议编写一个可以自动化安装过程的脚本。话虽如此,在这种情况下,这实际上是关于大学想要什么。