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

Two instances of application connected to same, altered database

,你好,

几天前在面试时我被问到一个奇怪的(对我来说)问题:

假设您有 2 个节点,每个节点在 java 中有 1 个应用程序实例。每个实例都使用相同的关系数据库 - 在节点 3。现在您需要使用新模式对该数据库进行更新,但您只需要升级 1 个节点。

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

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

我告诉他们我不知道该怎么做 - 至于我知道不可能 运行 使用不同版本数据库的两个版本的应用程序(可以对列进行一些更改)记不太清了)。

几天后我仍然找不到那个问题的答案。我用谷歌搜索了答案,但一无所获。

能否请您告诉我是否可行,并提供一些要查找的关键字或指向教程或文章的链接?

此致

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

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

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

基本原理很简单。 (但是 simple != easy。)有不止一种方法可以做到这一点,而且细节各不相同。

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

  • 确定旧代码必须保持不变的内容。

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

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

  • 更新代码。

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

您应该能够在您的测试环境中捕获这些类型的问题。 ("All of us have a test environment. Some of us are lucky enough to have a separate production environment." -- 未知)