Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 存储版本控制的数据库数据的标准/推荐方法是什么?_Mysql_Mongodb_Postgresql_Version Control_Database - Fatal编程技术网

Mysql 存储版本控制的数据库数据的标准/推荐方法是什么?

Mysql 存储版本控制的数据库数据的标准/推荐方法是什么?,mysql,mongodb,postgresql,version-control,database,Mysql,Mongodb,Postgresql,Version Control,Database,我想在数据库中存储一篇博客文章。我认为拥有不同版本的数据会很好,就像文本文件的版本控制一样 所以,我想象它像表格中的一行一样工作,有版本控制。例如,您可以检索该行的最新版本或以前的版本。你甚至可以从那一排分支 有这样的事吗 可能有用的信息: 我目前正在使用Python、Django和MySQL。我正在试用MongoDB 为清晰/更多上下文进行编辑: 我正在寻找一种更适合行而不是数据库的“版本控制”的解决方案;我对整个数据库的分支不太感兴趣。例如,我可以在2011年1月1日和2010年1月1日查询

我想在数据库中存储一篇博客文章。我认为拥有不同版本的数据会很好,就像文本文件的版本控制一样

所以,我想象它像表格中的一行一样工作,有版本控制。例如,您可以检索该行的最新版本或以前的版本。你甚至可以从那一排分支

有这样的事吗

可能有用的信息: 我目前正在使用Python、Django和MySQL。我正在试用MongoDB

为清晰/更多上下文进行编辑:
我正在寻找一种更适合行而不是数据库的“版本控制”的解决方案;我对整个数据库的分支不太感兴趣。例如,我可以在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
      存储的内容如下:

      • 身份证
      • 硕士学位
      • 版本号
      • 关于输入实体的其他相关数据(日期等)
      我通过这种方式获得的是一个ID,比如说一篇博客文章。如果有人编辑帖子,我会将该信息存储到
      revisions
      表中。通过触发器,我在
      revisions
      表中递增
      version\u id
      。之后,我用最新的
      版本id
      编号更新
      主表。这样,当我想查看最新版本时,就不必执行
      MAX()


      通过这种方式,我获得了简单但功能强大的网站内容版本系统。很容易看到变化,而且如果你滥用MySQL的一些很酷的功能(在我的实际表格中,我最大限度地滥用了InnoDB的集群主键,因此db设计与我在这里发布的设计略有不同),获取数据的速度也非常快。

      你考虑过使用git这样的版本控制系统吗?看到这样一个解决方案的优点和缺点会很有趣。@milan-自从git版本数据库记录以来?问题不是说任何数据库记录,而是说博客文章,大部分是文本,为什么不呢?这回答了你的问题吗?根据您的描述,DataGrove似乎更倾向于对整个数据库进行分支,而不是针对单个行。(请参见编辑)您能否提供有关主版本和修订版之间关系的信息?