, 你好,
几天前,在接受采访时,有人问我一个奇怪的问题:
想象一下,您有2个节点,每个节点都有1个Java应用程序实例。每个实例在节点3处都使用相同的关系数据库。现在,您需要使用新架构对该数据库进行更新,但是您只需要升级一个节点。
因此,您有1个具有旧数据库配置的旧应用程序实例和1个具有新数据库配置的新应用程序实例,它们同时运行并连接到相同的数据库。
一段时间后,如果更新正常,则旧实例将更新为新版本。
我告诉他们我不知道该怎么做-因为我知道无法运行使用不同数据库版本的两个版本的应用程序(对列所做的某些更改无法完全记住)。
现在过了几天,我仍然找不到该问题的答案。我用谷歌搜索了答案,但什么都没找到。
您能否告诉我是否可行,请给我一些关键字以查找或链接到教程或文章?
问候
不要做会破坏事情的改变。(您已经知道这一部分。)
添加新的可为空的列不应破坏旧代码。添加新的非空列将破坏旧代码。但是,使用一个或多个触发器来管理默认值,旧代码将继续工作。这类触发器通常不建议使用,以后再丢弃。
删除列将破坏新旧代码。因此,请弃用该列,更改代码以停止使用该列,然后将其删除。
基本原理很简单。(但是simple != easy
。)这样做的方法不只一种,而且细节各不相同。
如果您不确定某项变更不会破坏事物,请将其视为一项重大变更。
确定旧代码中必须保持不变的内容。
更改数据库以使您刚刚确定的那些事情继续有效。这可能涉及添加触发器,可更新视图,存储过程等。
把这些东西写下来。您将经常使用它。
更新代码。
弃用并删除您创建的内容以保持其正常运行。
您应该能够在测试环境中捕获这类问题。(“我们所有人都有一个测试环境。我们中有些人很幸运能够拥有一个单独的生产环境。”-未知)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句