真实生活中的ZODB
我正在用Python写一个应用程序,尝试了各种ORM(对象关系映射)设置和直接使用SQL,但都觉得很难看。
我在考虑使用ZODB作为对象存储,看起来是个不错的选择……你会推荐它吗?你有什么经验、问题和批评,特别是从开发者的角度来看,关于可扩展性、数据完整性、长期维护和其他替代方案的看法?有没有人用它开始过项目然后放弃了?为什么?
虽然ZODB、Pypersyst等的理念很有趣,但似乎大家对它们的热情不高 :(
5 个回答
5
我推荐这个。
我真的没有什么好挑剔的。如果你在找一个对象存储,这个就是最合适的。我之前在里面存了250万个对象,完全没有感觉到压力。
15
跟“任何键值存储”相比,ZODB的主要特点是它能自动处理属性变化,并且支持真正的ACID事务,还有干净的、可以随意引用其他持久对象的方式。
ZODB的功能不仅仅是Zope默认使用的FileStorage:
- RelStorage后端让你可以把数据存放在关系型数据库中,这样可以使用标准工具进行备份、复制等操作。
- ZEO让应用服务器和离线任务的扩展变得简单。
- 支持两阶段提交,可以在多个数据库之间协调事务,包括关系型数据库(前提是它们提供了TPC感知层)。
- 基于对象属性或包含关系的简单层级结构:你不需要写复杂的自连接查询来模拟这种结构。
- 基于文件系统的BLOB支持让处理大文件变得非常简单。
总的来说,我非常喜欢使用ZODB来解决几乎所有数据形态不明显是“方形”的问题。
27
我已经使用ZODB超过十年了,不论是在Zope里还是在其他地方。如果你的数据是层级结构的,ZODB非常好用。一个客户的最大数据存储大概有100GB吧?差不多就是这个量级。
这里有一个与Postgres的性能对比。
如果你在写WSGI的网页应用,这些包可能会对你有帮助: