在Web应用程序中处理类似源数据文件的最佳方法是什么?

时间:2011-03-06 11:56:18

标签: python

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

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

  • 我经常开发特殊工具来操作文件,复制数据库访问工具功能
  • 我想为非开发者提供受控网络访问此数据。

另一方面,它是数据,并且它“属于”数据库中。我希望我可以将它放在数据库中,但是我会遇到这些问题:

  • 如何将此数据库同步到源?版本包含代码和数据。
  • 如何在生成Web服务器的新实例时将其与数据一起发送?
  • 如何管理数据的预提交测试?

我迄今为止所考虑的事情:

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

提前致谢!

更新

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

  • 世界城市及其他候补名称
  • 货币名称
  • 酒店坐标

列表一直在继续,但想象一下,如果有人改变了教我罗马在意大利的坐标,或者有人添加“浪漫”作为拉斯维加斯的替代名称,试图解析句子Romantic hotel for 2 in Rome arriving in Italy next monday (是的,这个例子很蹩脚,但我希望你能得到漂移)。

2 个答案:

答案 0 :(得分:1)

好的,这是一个想法:

  1. 按现在的方式发送所有数据。
  2. 让安装脚本将其安装在适当的数据库中。
  3. 让用户修改此数据库并为其提供一个“恢复原始”按钮,只需从文本文件重新安装即可。
  4. 或者,这条路线可能更容易,尤其是升级安装时:

    1. 按现在的方式发送所有数据。
    2. 让用户修改数据并将修改后的版本存储在适当的数据库中。
    3. 让代码查看数据库,如果找不到合适的数据,则返回文本文件。不要让代码以任何方式修改文本文件。
    4. 在任何一种情况下,您都可以保留当前的测试代码;您只需要添加测试,确保数据库正确覆盖文本文件。

答案 1 :(得分:1)

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

在这种情况下,您可以将数据拆分为单独的包。在python发行术语中,使用您的应用程序所依赖的单独一个鸡蛋;包部署工具(如pip和buildout)将自动引入依赖关系。这样你就可以独立地进行版本化,你可以使用其他工具等等。

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

查看pytz时区数据库,了解另一个资源项目如何管理此类结构的一个很好的例子。