Python 什么';在web应用程序中处理源类数据文件的最佳方法是什么?

Python 什么';在web应用程序中处理源类数据文件的最佳方法是什么?,python,Python,我有大约30MB的文本数据,这是我在web应用程序中使用的算法的核心 一方面,数据是算法的一部分,对数据的更改可能导致整个算法失败。这就是为什么我将数据保存在源代码管理中的文本文件中,并且所有更改都是自动测试的(预提交)。我现在有很好的控制能力。在生成更多web实例时,将数据与源一起分发不是问题,因为它与源一起标记。我目前有以下问题: 我经常开发特殊的工具来操作文件,复制数据库访问工具的功能 我想让非开发者控制的网络访问这些数据 另一方面,它是数据,它“属于”数据库。我希望我能将其放入数据库

我有大约30MB的文本数据,这是我在web应用程序中使用的算法的核心

一方面,数据是算法的一部分,对数据的更改可能导致整个算法失败。这就是为什么我将数据保存在源代码管理中的文本文件中,并且所有更改都是自动测试的(预提交)。我现在有很好的控制能力。在生成更多web实例时,将数据与源一起分发不是问题,因为它与源一起标记。我目前有以下问题:

  • 我经常开发特殊的工具来操作文件,复制数据库访问工具的功能
  • 我想让非开发者控制的网络访问这些数据
另一方面,它是数据,它“属于”数据库。我希望我能将其放入数据库中,但我会遇到以下问题:

  • 如何将此数据库同步到源?发布包含代码和数据
  • 在生成web服务器的新实例时,如何将其与数据一起发送
  • 如何管理数据的提交前测试
到目前为止,我考虑过的事情:

  • Sqlite(不解决非开发人员访问)
  • 构建一个精心制作的预生产数据库,用户将编辑该数据库,为“真实”数据库创建“补丁”,开发人员将接受、测试和提交该数据库。听起来很复杂。
    我还没有完全设计这个,我当然希望我在这里重新发明轮子,一些用户会告诉我我的方法的错误
顺便说一句:我也有一个“常规”数据库,里面有一些不是算法数据的东西。
BTW2:我添加了Python标记,因为我目前使用Python、Django、Apache和Nginx、Linux(一些lame开发人员使用Windows)

提前谢谢

更新

数据的一些例子(算法是自然语言处理的东西):

  • 世界城市及其替代名称
  • 货币名称
  • 酒店坐标
这个列表还在继续,但是想象一下,如果有人改变坐标告诉我罗马在意大利,或者有人把“浪漫”作为拉斯维加斯的另一个名字(是的,这个例子很蹩脚,但我希望你能理解大意),那么试着解析下周一抵达意大利的“罗马浪漫酒店”这句话,这里有一个想法:

  • 按现在的方式发送所有数据
  • 让安装脚本将其安装到相应的数据库中
  • 让用户修改此数据库,并给他们一个按钮“还原到原始”,只需从文本文件重新安装即可
  • 或者,此路线可能更容易,尤其是在升级安装时:

  • 按现在的方式发送所有数据
  • 允许用户修改数据并将修改后的版本存储在相应的数据库中
  • 让代码在数据库中查找,如果找不到适当的数据,则返回到文本文件。不要让代码以任何方式修改文本文件

  • 在这两种情况下,您都可以保留当前的测试代码;您只需添加测试,确保数据库正确覆盖文本文件。

    我将其称为资源,它是应用程序依赖的数据,而不是应用程序管理的数据。图像、CSS和模板是类似的资源,您可以控制它们的版本

    在这种情况下,您可以将数据拆分为单独的包。在python发行版中,使用应用程序所依赖的单独的egg;pip和buildout等包部署工具将自动拉入依赖项。通过这种方式,您可以独立地对其进行版本设置,还可以使用其他依赖于它的工具,等等

    最后,选择一种可以由源代码管理系统有效管理的格式。这意味着一种文本格式。您可以在启动时开始解析该格式,但通过将其保持为文本,您可以通过对其进行更改来正确管理它。这可以是启动时加载到sqlite数据库中的SQL转储(CREATETABLE和INSERT语句),也可以是其他一些基于python的结构。您还可以选择按需加载数据,根据需要将其缓存在内存中


    看看时区数据库,它是另一个资源项目如何管理这些结构的一个很好的例子。

    Ooh,我想我没有正确解释。很抱歉这个算法数据实际上是数据(不是代码)。我将在问题主体中添加一些这样的例子。@Tal Weiss:这改变了一切。重写我的答案。