Mysql 存储版本控制的数据库数据的标准/推荐方法是什么?
我想在数据库中存储一篇博客文章。我认为拥有不同版本的数据会很好,就像文本文件的版本控制一样 所以,我想象它像表格中的一行一样工作,有版本控制。例如,您可以检索该行的最新版本或以前的版本。你甚至可以从那一排分支 有这样的事吗 可能有用的信息: 我目前正在使用Python、Django和MySQL。我正在试用MongoDB 为清晰/更多上下文进行编辑:Mysql 存储版本控制的数据库数据的标准/推荐方法是什么?,mysql,mongodb,postgresql,version-control,database,Mysql,Mongodb,Postgresql,Version Control,Database,我想在数据库中存储一篇博客文章。我认为拥有不同版本的数据会很好,就像文本文件的版本控制一样 所以,我想象它像表格中的一行一样工作,有版本控制。例如,您可以检索该行的最新版本或以前的版本。你甚至可以从那一排分支 有这样的事吗 可能有用的信息: 我目前正在使用Python、Django和MySQL。我正在试用MongoDB 为清晰/更多上下文进行编辑: 我正在寻找一种更适合行而不是数据库的“版本控制”的解决方案;我对整个数据库的分支不太感兴趣。例如,我可以在2011年1月1日和2010年1月1日查询
我正在寻找一种更适合行而不是数据库的“版本控制”的解决方案;我对整个数据库的分支不太感兴趣。例如,我可以在2011年1月1日和2010年1月1日查询博客文章的内容(无需切换数据库)。版本控制是一个复杂的主题;正确的操作确实很有挑战性,这就是为什么即使使用git也很困难的原因。我不想写一个完整的版本控制系统
对于简单的要求,在伪MangoDb/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
- 不将上次编辑的
与版本号关联,这可能是不可取的
- 即使某个版本已经发布,也允许版本控制
- 可以获取摘要,而不必获取整个文章
- 每次都复制整个文本。我想这不是对文本数据的真正关注(尝试键入1GB…)。然而,对于更大的博客网站来说,这将是一个问题。缓解措施:使用deflate、delta压缩压缩压缩文本
- 需要在更新时更新两个对象
- 允许您对整个数据库进行版本设置
它跟踪数据库发生的所有更改,您可以标记版本并在它们之间来回切换。
DataGrove的独特之处在于它对整个DB-schema和数据进行了版本化
在您的示例中,只需将您想要的行/数据添加到DB并标记一个版本。您将始终能够返回到该版本,甚至可以从中分支。首先,我必须说这是一个有趣的问题 在我的工作中,我必须保存各种用户输入的版本。我这样做的方式,当然我也不知道这是不是正确的方式,如下所示: 我有一个
master
表和revisions
表。我选择这两个名字只是为了示例
master所做的是存储以下信息:
- id(自动递增)
- 版本号(int)
revisions
存储的内容如下:
- 身份证
- 硕士学位
- 版本号
- 关于输入实体的其他相关数据(日期等)
revisions
表中。通过触发器,我在revisions
表中递增version\u id
。之后,我用最新的版本id
编号更新主表。这样,当我想查看最新版本时,就不必执行MAX()
通过这种方式,我获得了简单但功能强大的网站内容版本系统。很容易看到变化,而且如果你滥用MySQL的一些很酷的功能(在我的实际表格中,我最大限度地滥用了InnoDB的集群主键,因此db设计与我在这里发布的设计略有不同),获取数据的速度也非常快。你考虑过使用git这样的版本控制系统吗?看到这样一个解决方案的优点和缺点会很有趣。@milan-自从git版本数据库记录以来?问题不是说任何数据库记录,而是说博客文章,大部分是文本,为什么不呢?这回答了你的问题吗?根据您的描述,DataGrove似乎更倾向于对整个数据库进行分支,而不是针对单个行。(请参见编辑)您能否提供有关主版本和修订版之间关系的信息?