1

为 Python 2.7 寻找的东西是:

  • 简单- 快速启动并运行,无需大量开销
  • 可修改- 可以处理原型设计带来的更改和数据模式的频繁更改
  • 可靠- 无论如何都能恢复,即如果发生断电,我不会因为数据存储损坏而丢失整个数据存储。

一些候选人和评论:

  • 文本 / CSV / JSON 文件- 看起来很简单,如果您经常保留文件的备份副本,或者实施简单的备份加日志设置(在程序启动时备份文件,写入所有更改),可能会有些可靠到日志文件)
  • SQLite - 简单可靠,但处理频繁的更改似乎有点麻烦。
  • Shelve / Marshal / cPickle - 简单且可修改,不确定它有多可靠。如果文件最终损坏,看起来你就是 SOL。至少使用人类可读的文件,您可以将其拼凑起来。
  • ZODB - 可能是赢家。我不清楚,它是否需要你的对象来继承?我想保持持久层的良好分离,因为这是用于初始原型设计,并且一旦模式被散列出来可能会改变。
  • SQLAlchemy - 对于一个小型项目,似乎开销很大,您不妨只使用 SQLite。也许用 Elixir 更好?

如果嵌入了 MongoDB,那可能是完美的。如果我能解决频繁变化的模式问题,SQLite 会很棒。根据您的经验,什么符合要求?

4

2 回答 2

1

ZODB 提供完全的 ACID 合规性,它符合可靠性要求。

任何继承自的对象都会Persistent成为它自己的单独记录(将更改记录为一个单元),但您不必这样Persistent不需要使用,但建议使用。

ZODB 严重依赖pickle模块,因此__setstate__可以使用钩子进行模式升级。

如果您的数据结构符合 ZODB 数据自然构建的固有树结构,请使用 ZODB。索引是一种附加操作,您需要自己处理。Zope / Plone 使用事件和专用目录来索引来自对象的有趣信息,然后让您在大型层次结构中再次有效地找到这些对象。

如果您的数据本质上更像表格(一堆具有复杂相互关系的不同信息),请坚持使用 SQL 解决方案。Text / CSV / JSON / shelve / plain pickle 不够可靠。

如果你知道你的 SQL,SQLAlchemy 很容易使用;这是一个优秀的 ORM。Elixir 不再维护,SQLAlchemy 本身现在提供项目提供的所有功能,本机。要管理模式迁移,您可以查看sqlalchemy-migrate

对于简单的项目,直接使用 SQLite 是很容易的,但是迁移 schema 有点麻烦。我之前使用过schema_version编译指示来检测何时需要模式迁移。

于 2013-05-04T17:22:06.617 回答
0

我推荐谷歌协议缓冲区

  • 简单:是的,有一个完整的库。
  • 可修改:是的,如果架构发展,使用旧架构的版本将忽略架构中没有的内容。
  • 可靠:我想这取决于您的要求,您可能需要额外的照顾,是的。

奖金:

  • 支持多种语言,让您可以自由地使用不同工具使用数据。

如果可靠性是主要障碍,我认为您想使用 sqlite。

于 2013-05-04T17:11:32.860 回答