0

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

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

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

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

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

我的第一个想法是创建一个 bash 脚本,将所有这些模块连接在一起,因为它们都使用标准输入/标准输出进行操作,但这似乎是一种奇怪的做事方式。

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

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

我对数据库管理非常陌生,并且在分发软件方面没有大量经验,但我想做好这个项目。我在这里先向您的帮助表示感谢。

4

1 回答 1

1

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

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

在安装方面,这实际上取决于涉及多少步骤。如果它像解压缩文件夹并确保该文件夹在您的 PATH 环境变量中一样简单,那么创建任何特殊的分发机制可能不值得麻烦(除非您能够轻松地做到这一点)。不过,我建议在存储库中的 INSTALL 或 README 文档中清楚地记录安装步骤(以便对说明进行快照)以及存储库的网站。如果步骤数量少且易于完成,那么我不会再费心了。如果涉及的步骤很多(比如下载和安装大量依赖项),那么我建议编写一个可以自动化安装过程的脚本。话虽如此,它'

于 2014-03-07T06:47:49.810 回答