我想将博客文章存储在数据库中。我认为拥有不同版本的数据会很不错,就像版本控制对文本文件一样。
所以,我想它就像一个表中的一行,它有版本控制。因此,例如,您可以检索该行的最新版本或先前版本。你甚至可以从那一行开始分支。
这样的事情是否存在?
可能有用的信息: 我目前正在使用Python,Django& MySQL的。我正在试验MongoDB
编辑以获得清晰度/更多背景信息: 我正在寻找一种更适合行的“版本控制”而不是数据库的解决方案;我对分支整个数据库并不感兴趣。例如,我将能够在2011年1月1日和2010年1月1日查询博客文章的内容(无需切换数据库)。
答案 0 :(得分:4)
版本控制是一个复杂的主题;正确行事真的很有挑战性,这本质上就是为什么即使使用,例如git可能很难。我不想写一个完整的版本控制系统。
对于更简单的要求,请考虑此结构,在伪mongodb / JSON中:
BlogPost {
"_id": ObjectId("..."),
"slug" : "how-to-version-my-posts",
"author" : "cammil",
"published" : date,
"lastModified" : date,
"publicVersion" : 32,
"draftVersion" : 34,
"teaserText" : "lorem ipsum dolor sit amet..."
}
BlogPostBody {
"_id" : ObjectId("..."),
"Version" : 32,
"Text" : "lorem ipsum dolor sit amet..."
}
所以这里的想法是分别存储每个版本和指向当前公共版本的指针以及编辑,博客等的当前版本。
我的回答是以MongoDB为中心(因为我为家庭使用构建了一个基于MongoDB的博客引擎),但它应该适用于任何存储系统。
优点:
MAX
次查询last edited
与版本号相关联,这可能是不可取的缺点:
答案 1 :(得分:2)
OffScale DataGrove允许您对整个数据库进行版本化。
它跟踪发生在数据库中的所有更改,您可以标记版本并在它们之间来回切换。 DataGrove的独特之处在于它可以对整个数据库模式和数据进行版本化。
在您的示例中 - 只需将您想要的行/数据添加到数据库并标记版本。你将永远能够回到那个版本甚至从它分支。
答案 2 :(得分:2)
首先,我必须说这是一个有趣的问题。
在我的工作中,我要保存各种用户输入的版本。我这样做的方式,无论如何我都不知道这是不是正确的方法,如下:
我有一个master
表和revisions
表。我只选择这两个名字作为例子。
主人做的是存储以下信息:
revisions
商店的内容如下:
我通过这种方式获得的是我得到了一个ID,让我们说一篇博文。如果有人编辑帖子,我会将该信息存储到revisions
表。通过触发器,我正在递增version_id
表中的revisions
。之后,我使用最新的master
号码更新version_id
表。这样,当我想看看最新版本是什么时,我不必执行MAX()
。
通过这种方式,我获得了简单而强大的网站内容版本系统。很容易看到变化,如果你滥用了一些MySQL的酷炫功能,那么获取数据的速度也非常快(在我的实际表格中,我正在滥用InnoDB的集群主键,因此数据库设计略有差异。我在这里发布了。)