1

请允许我陈述我的情况。

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

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。

4

2 回答 2

1

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

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

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

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

version | module 
1       | basic_game
2       |  gun

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

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

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

于 2013-01-16T06:06:37.493 回答
1

你说的是使用版本控制系统,比如GitMercurialSVN。我会这样做:

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

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

这是一个普遍的答案,但这是一个非常普遍的问题。

于 2013-01-16T05:58:57.997 回答