4

概括:

使用 Python 代码重新分发 Firebird SQL 数据库的最佳(最简单、最灵活、最简单)的方法是什么,最终用户可以使用它而无需安装和维护 Firebird 的麻烦?

背景(有点啰嗦):

我一直在尝试编写一个程序来筛选股票基本面,并根据这些基本面和随机权重评估不同公司的股票。我注意到,经过一段时间后,程序似乎停止了。我确实在这里和那里使用了多线程,并且我考虑过死锁/活锁,但除了梳理代码并查看它是否有意义之外,我无法调试它。我注意到我也消耗了大量的 RAM,因为所有这些数据都保存在内存中的大 Python 字典中。所以我想把它放在 SQL 数据库中可以解决这个问题。

几周后,我让代码再次与 SQLAlchemy 和 SQLite 一起工作。现在的问题是评估功能需要十分钟(!)每只股票。乘以最初竞争的总共 12 个“基因组”,这将加起来大约 200 小时。我开始想这可能与 SQLite 的并发锁或类似的东西有关,所以我开始尝试使用 Firebird,因为它是我所知道的唯一一个将数据库存储在文件中的另一个。

问题阐述:

理想情况下,我可以将我的代码放在磁盘或服务器上,将其带到另一台装有 Python 的计算机上,然后开箱即用地运行所有内容。这对于 SQLite 是可行的。火鸟可以吗?我知道 Windows 有一个单独的嵌入式包,但 Linux 只有经典服务器附带的 libfbembed 库。文档说 Linux 总是需要正确安装某些版本的 Firebird 服务器。

最终用户是否需要进行任何数据库管理才能完成这项工作?也就是说,他们是否需要手动设置用户等,就像我刚刚给他们一个 fdb 文件并告诉他们找出其余的一样?还是为 Firebird 安装基本软件包就足够了?在重新分配 Firebird 数据库时,我是否能够获得接近 SQLite 的简单性?我需要将任何特殊语法传递给 SQLalchemy/FDB/Kinterbasedb 以使用嵌入式服务器吗?(我在 SQLalchemy 或 FDB 的网站上都找不到任何关于此的信息)。我的程序能否在 Linux 和 Windows 上无缝运行,或者是否需要针对每种情况进行略微不同的设置?

在此先感谢任何可以回答其中一些问题的人。

4

1 回答 1

4

好吧,我只能给出部分答案。但我认为这已经足够开始了。

让我们从 Firebird 嵌入式开始:正如您所写的 - 使用 linux 作为操作系统,您必须提供完整的安装。没有其他办法。

提示:使用从 firebird 提供的本机 tgz,而不是从发行版提供的任何包 - 以避免依赖地狱。

在 Windows 上安装 Firebird:Windows Firebird 安装程序主要是一个“点击”的东西。幸运的是,您可以自定义安装程序:安装 Firebird 并查看 doc\scripted-install.txt。

提示:在 Win7/8 上不要安装到%PROGRAM FILES%%PROGRAM FILES (x86)%

与火鸟交谈:AFAIK 你有两种选择,但对于这两种选择,我不知道它们是否以及如何与 SQLAlchemy 一起工作:

  • 来自 firebird 的 fdb 模块。安装 fdb 包时,请确保适当的 fbclient.dll 在搜索路径中。
  • pyfirebirdsql 模块:https ://github.com/nakagami/pyfirebirdsql/不需要 dll 或那个。部分缺点 - 它不如 fdb 模块快,因为没有真正的数据库引擎。就我个人而言,我只将它用于简短的查找。

使用 fdb 模块,您还可以与 firebird 服务 api 对话 - 从创建过度删除数据库到查询标头统计信息,最后执行备份/恢复操作。

如果最终用户需要执行任何数据库管理,那至少应该回答这个问题。

于 2014-03-26T07:16:14.943 回答