【问题标题】:Implementing version systems in database [closed]在数据库中实现版本系统[关闭]
【发布时间】:2013-01-16 05:49:23
【问题描述】:

请允许我说明我的情况。

我有一个应用程序,我可以在其中处理一些存储在数据库中的数据。例如:游戏应用程序。

1) 现在,假设我的应用程序运行在版本 5。在玩我的应用程序的任何时候,如果我觉得当前添加的功能(功能 5)不合适,我想切换回以前的应用程序的版本(例如,实现了功能 1、2、3 和 4 的版本 4)。

2) 这意味着我需要在数据库级别实现版本控制系统,以便我可以使用以前版本(版本 4)所需的数据运行我的应用程序。 简单来说,我不想要我最近添加到生产数据库中的任何数据(与功能 5 相关),以便我可以在版本 4 上运行我的应用程序。

3)后来,经过更多的开发,当我觉得功能 5 稳定时,我想签入我的应用程序的版本 6 并使其上线。

4) 版本 1、2、3 和 4、5 就像检查点:这是我决定我的应用可以上线的阶段。我希望能够在版本之间切换并在需要时使它们生效。

5) 另外,澄清一下:签入的版本不能被修改。这意味着一旦设置了检查点,例如版本 3,就无法对该版本进行任何更改。

请说明在数据库级别实施此版本控制系统的适当方法。我想到了一些选项,比如使用 hive 在版本点备份数据,并在 hive 中存储尽可能多的应用程序数据版本。我确实认为这会起作用,但它肯定看起来不像笨蛋。我想知道的是 - 我所说的方法是一个足够好的选择,还是有一些开源应用程序可以让我立即对数据库中的数据进行版本控制?任何其他建议或想法都非常欢迎和赞赏。

建议实施

根据@Sameera 的回答,我想做什么。

1) 创建一个新版本表并将其与应用程序表相关联。

2) 将以前与应用程序表相关的其他表关联到版本表。

3) 每个版本表都将有一个状态属性 0、1 或 2:截至目前,1 表示 dev,2 表示 live,0 表示 dead。

【问题讨论】:

    标签: mysql ruby-on-rails database version-control version


    【解决方案1】:

    我认为您的要求有点不寻常 :) 并且建议的解决方案也将 :D (假设我的问题是正确的)

    以下是我认为可行的基本结构

    您可以有一个包含所有版本和新功能链接的表格

    例如:如果您将模块添加到 pick a gun,在版本 5 中,您到 pick a gun 的链接将添加到带有版本号的表中

    version | module 
    1       | basic_game
    2       |  gun
    

    然后根据用户选择的版本,您可以动态加载所有模块及其布局。

    这样,您的用户将不会使用新的更改来访问数据库,并且您不想对数据库进行版本控制。 (另一件事是即使您对数据库进行版本控制,您也应该有一种控制代码的方法)

    我不确定这是否适用于您,但这是我能想到的一种解决方案

    【讨论】:

    • 谢谢你,我得到你的解决方案了 :),这应该对我有用。
    • 我将在我的数据库中实现这个版本表,然后将我所有不断变化的表关联到这个版本表,而不是直接关联到应用程序表。是的,这应该工作。再次感谢!
    【解决方案2】:

    您说的是使用version-control system,例如GitMercurialSVN。我会这样做:

    • 检入迁移文件和示例数据以加载到数据库中,连同代码。在迁移中,我会将数据加载到数据库中。
    • 如果需要还原,我会运行迁移以将数据库返回到“0”状态,然后使用代码存储库还原代码。然后我会重新运行迁移以将数据库恢复到其顶级迁移和内容。

    Git 是一个用于维护配置版本的出色系统。 SVN 是一个旧的备用,仍然相关。除非您已经使用版本控制系统一段时间并了解所有问题,否则不要尝试自己编写。

    这是一个笼统的答案,但这是一个非常笼统的问题。

    【讨论】:

      猜你喜欢
      • 2010-10-04
      • 2016-08-25
      • 2013-04-18
      • 2011-01-18
      • 2018-06-19
      • 2010-09-16
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多