两个应用程序实例连接到同一个已更改的数据库

时间:2018-02-06 13:18:47

标签: database relational-database distributed-system

,你好,

几天前在采访中我被问到一个奇怪的(对我来说)问题:

想象一下,你有2个节点,每个节点有1个java应用程序实例。每个实例在节点3使用相同的关系数据库。现在,您需要使用新架构对该数据库进行更新,但只需要升级1个节点。

因此,您有1个旧应用程序实例,旧数据库配置和1个新应用程序实例,新数据库配置同时运行,并且连接到同一个数据库。

经过一段时间后,如果更新工作正常,旧实例将更新为新版本。

我告诉他们我不知道该怎么做 - 因为我知道运行两个版本的应用程序使用不同版本的数据库是不可能的(对列进行了一些更改不能完全记住)。 / p>

现在几天后我还是找不到那个问题的答案。我用google搜索答案,但我什么也没找到。

请您告诉我是否有可能并给我一些关键词来查找或链接到教程或文章?

此致

1 个答案:

答案 0 :(得分:2)

不要做出破坏事情的改变。 (你已经知道这部分了。)

添加新的可空列不应该破坏旧代码。添加一个新的,不可为空的列破坏旧代码。但是使用一个或多个触发器来管理默认值,旧代码将继续工作。这些类型的触发器通常会被弃用并在以后删除。

删除列会破坏旧代码和新代码。因此,请弃用该列,更改代码以停止使用该列,然后将其删除。

基本原则很简单。 (但simple != easy。)这样做的方法不止一种,细节也各不相同。

  • 如果你不确定改变不会破坏,请对待 它就像一个突破性的变化。

  • 确定旧代码必须显示的内容。

  • 更改数据库以继续处理您刚刚确定的内容。 这可能涉及添加触发器,可更新视图,存储 程序,等等。

  • 写下这些东西。你会经常使用它。

  • 更新代码。

  • 弃用并删除您创建的内容以保持正常运作。

您应该能够在测试环境中发现这些问题。 (“我们所有人都有一个测试环境。我们中的一些人有幸拥有一个独立的生产环境。” - 未知)