【发布时间】:2012-05-16 12:46:21
【问题描述】:
我希望创建一个系统,用于在 Google App Engine (Python) 上跟踪 ndb.Models/Expandos 内容的版本(历史)。
内容可能比较长,可能有很多版本,但版本之间的差异可能很小。我希望其他人已经做过类似的事情,我想知道他们是如何做到的,以及哪些原则可以指导设计和开发。
在部署时不知道数据模型的属性是什么(例如“标题”、“内容”、“正文”、“日期”等),但类型是已知的(日期、文本等)。
我最初的想法是安排如下:
from google.appengine.ext import ndb
class Version(ndb.Expando):
version_id = ndb.IntegerProperty()
# dated, etc.
# data properties are not known in advance, hence Expando
class MyDoc(ndb.Model):
head = ndb.KeyProperty(kind=Version)
instance = ndb.kind=Property(kind=Version, repeated=True)
# ^^^ may be a StructuredProperty?
算法概述是:
保存
每次用户保存文档时,将所有最新数据放入新的Version 并将head 指向该实例。
此时或之后的某个时间,浏览旧版本并将完整保存更改为差异(以节省空间),例如diff-match-patch。我希望每小时、每天或某个固定时间或某个固定数量的差异进行一次完整的保存。
加载中
加载head 很简单。
旧版本将被标记为完全保存或差异,具体取决于哪些数据可以直接返回或从差异编译。
有什么想法?
我相信其他人已经解决了这个问题,我很想知道关于它的想法和实现。显然,有完整的版本控制系统,例如 Git、Mercurial 和 Subversion 以及 CVS - 但这些系统对于预期目的来说都是多余的,并且无法在 Google App Engine 上运行。
【问题讨论】:
-
您是否考虑过简单地使用来自 Git 之类的模型并使其适应您自己的目的?
-
我很好奇你是否找到了解决方案,我也有类似的问题。
标签: google-app-engine versioning app-engine-ndb