【问题标题】:Is there anything wrong with creating a Python Pickle powered website?创建一个 Python Pickle 驱动的网站有什么问题吗?
【发布时间】:2011-04-10 13:30:10
【问题描述】:

我一直在玩这个想法很长一段时间,但还没有看到任何关于人们这样做的信息。我有一个小型网站项目,需要在其中加载和修改 1 个对象。这个对象非常简单,不应该超过几 kb。为什么不使用pickle 和/或shelve 来保存并加载这些数据,而不是为少量数据运行数据库?我计划在项目中使用像 Bottle 或 Flask 这样的微型 Web 框架。

有什么理由不使用这种方法来加载数据吗?它只会在 Apache 启动时加载 pickle 文件,所以我认为不会影响速度(比查询数据库快)。

感谢您的任何意见!

【问题讨论】:

  • 为什么要用泡菜?为什么不是简单的纯文本?为什么不是对象的 Python 源代码?为什么要限制自己腌制物体?
  • 有什么理由不使用 SQLite 之类的东西吗?
  • @S.Lott 该对象包含子对象,其中包含一些日期时间对象。如有必要,我可以做纯文本。网站上有一个页面可以插入一些新数据,所以这就是为什么它不能在源本身中。我试图让网站保持简单,如果我不需要数据库,就不要数据库。
  • 请用其他事实更新问题。请使问题尽可能完整和正确。

标签: python pickle shelve flask


【解决方案1】:

我不会直接将腌制字符串写入文件。有太多的低级细节需要担心。查看DurusZODBthis post from FriendFeed,了解如何在 MySQL 中存储 Python 对象。

不过,不要丢弃关系数据库,它们开箱即用会给您带来很多好处(即使对于简单的项目也是如此)。

【讨论】:

  • 感谢您的链接。如果我要使用任何数据库,那将是 MongoDB。我没有考虑框架运行多个 python 进程并且如果某些内容被修改则无法访问同一个对象的问题。它必须触发某种标志并让每个进程重新加载腌制文件?还有哪些“需要担心的低级细节”?谢谢!
【解决方案2】:

没有理由不能通过标准 Python pickleshelve 模块实现对象持久性。只需确保您的物品干净安全地腌制即可。如果您的网站超出当前范围,可扩展性可能会成为一个问题,但在此之前,您的想法应该可以正常工作。如果那一天到来,下一个明显的步骤是考虑使用 Python 的优秀 SQLite module,它预先打包在最新版本的语言中。

【讨论】:

  • 从 Pickle 过渡到 MongoDB 比 SQL 更容易。
  • 是的,使用 pickle 启动并运行它并没有错。谁知道呢,也许泡菜就可以解决你的问题。如果没有,您总是可以在出现问题时切换到数据库。保持简单,直到它要求更多。
  • @David M 我以前使用过很多 SQL,所以两者都不是问题,我会选择使用 MongoDB 来获得更多 NoSQL 经验 :)
  • 我并不是说 SQL 很难,只是说 MongoDB 等更类似于 pickle。
  • Re SQL vs. NoSQL:这场辩论没有通用的正确答案。除了最极端的用例之外,这一切都转化为个人偏好和宗教信仰。最好尝试并从仅从经验中获得的更广泛的观点中受益。
【解决方案3】:

除了您已经知道的并发问题之外,您还必须确保文件始终处于一致状态。例如,如果服务器在写入文件的过程中崩溃了,那会发生什么?如果您走这条路,您需要考虑并实施解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2013-12-22
    • 2014-01-02
    • 2012-03-24
    • 1970-01-01
    相关资源
    最近更新 更多