我有大约30 MB的文本数据,这是我在Web应用程序中使用的算法的核心。
一方面,数据是算法的一部分,对数据的更改可能导致整个算法失败。这就是我将数据保存在源代码管理中的文本文件中的原因,并且所有更改都是自动测试的(预提交)。我目前有很好的控制水平。在我们生成更多Web实例时将数据与源一起分发是一个非问题,因为它与源一起标记。我目前遇到这些问题:
另一方面,它是数据,并且它“属于”数据库中。我希望我可以将它放在数据库中,但是我会遇到这些问题:
我迄今为止所考虑的事情:
提前致谢!
更新
数据的一些例子(算法是自然语言处理的东西):
列表一直在继续,但想象一下,如果有人改变了教我罗马在意大利的坐标,或者有人添加“浪漫”作为拉斯维加斯的替代名称,试图解析句子Romantic hotel for 2 in Rome arriving in Italy next monday
(是的,这个例子很蹩脚,但我希望你能得到漂移)。
答案 0 :(得分:1)
好的,这是一个想法:
或者,这条路线可能更容易,尤其是升级安装时:
在任何一种情况下,您都可以保留当前的测试代码;您只需要添加测试,确保数据库正确覆盖文本文件。
答案 1 :(得分:1)
我将这称为资源,这是您的应用程序所依赖的数据,而不是您的应用程序管理的数据。图像,CSS和模板是类似的资源,您可以将它们全部控制在版本中。
在这种情况下,您可以将数据拆分为单独的包。在python发行术语中,使用您的应用程序所依赖的单独一个鸡蛋;包部署工具(如pip和buildout)将自动引入依赖关系。这样你就可以独立地进行版本化,你可以使用其他工具等等。
最后,选择可由源控制系统有效管理的格式。这意味着文本格式。您可以在启动时启动解析该格式,但通过保持文本,您可以通过对其进行更改来正确管理它。这可能是在启动时加载到sqlite数据库的SQL转储(CREATE TABLE和INSERT语句),或者是其他一些基于python的结构。您还可以选择按需加载数据,并根据需要将其缓存在内存中。
查看pytz时区数据库,了解另一个资源项目如何管理此类结构的一个很好的例子。