mysql - 软件工程 : Combining many modular programs in Unix

标签 mysql database unix software-packaging

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

5年前关闭。




Improve this question




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

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

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

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

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

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

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

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

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

    最佳答案

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

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

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

    关于mysql - 软件工程 : Combining many modular programs in Unix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22243121/

    相关文章:

    mysql - 如何在shell脚本中将MySQL查询输出转换为数组?

    php - 我如何通过 phpmyadmin 将包含部分数据的文件(csv/excel)导入到数据库中的表中?

    Java 列出连接到数据库的参数?

    linux - 如何在 Perl 中解析成对数据时转义额外的空行

    c# - Mysql连接到服务器没有任何数据库

    mysql - 如何输入动态 key 到json_extract mysql?

    php - 从 PHP 访问数据库的最佳方式是什么?

    sql - 为什么 Google 的 BigTable 被称为 NoSQL 数据库?

    c - fopen 是否创建文件描述符?

    linux - 不同行的 IF 语句