适用于面向架构的文档的灵活和可插拔版本控制系统
项目描述
zopyx.versioning
zopyx.versioning 是一个用于面向架构的内容对象(zope.schema、Archetypes、Dexterity等)的通用版本控制系统。
为什么还需要另一个版本控制系统?
Zope世界中的现有版本控制方法包括
CMFEditions
广泛使用
过于庞大
与CMF紧密集成
实现脆弱
做“太多”
以一种非常不透明的方式做“太多”
除Python pickles以外的后端序列化格式
仅基于ZODB的后端
后端不可插拔
基本概念
黄金法则#1:保持简单,保持小巧
可插拔存储API(存储版本化数据)
使用JSON作为要版本化的对象和版本化器、版本化器和后端存储之间的数据交换格式(存储可以使用不同的序列化格式,例如,基于ZODB的后端使用“pickle”,典型的NoSQL后端如MongoDB使用“json”)
利用Zope组件架构将任意内容对象适应到存储API
该解决方案并不声称存储和恢复内容对象的完整状态。相反,我们专注于处理元数据和内容本身。如果一个对象使用复杂内部数据模型,则负责将数据序列化和反序列化为JSON。
将复杂功能(可能处理引用、对象关系等)排除在核心版本化引擎之外 - 这可能通过实现IVersionSupport的适配器来处理。
开放性问题
去重应该在存储层处理还是版本化层处理(我假设在存储层处理,作为一个可选功能,以保持总体复杂度低)
所有可版本化对象都必须提供唯一ID(对于基于Archetypes的内容为UID)。Dexterity和基于ZTK/zope.schema的内容怎么办?
如何处理“大”内容。例如,MongoDB-based后端默认嵌入文档的4MB限制(通常足够用于标准内容,但不适用于像图像这样的二进制内容)
变更日志
0.1.0 (2010-07-09)
首次发布,基于MongoDB版本的存储