跳转到主要内容

适用于面向架构的文档的灵活和可插拔版本控制系统

项目描述

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限制(通常足够用于标准内容,但不适用于像图像这样的二进制内容)

作者

ZOPYX Ltd.
c/o Andreas Jung
Charlottenstr. 37/1
D-72070 Tuebingen
德国
www.zopyx.com

变更日志

0.1.0 (2010-07-09)

  • 首次发布,基于MongoDB版本的存储

项目详情


由以下支持