gpt4 book ai didi

java - 代码升级之间的 Mongodb 和 java 数据版本控制

转载 作者:可可西里 更新时间:2023-11-01 09:45:56 24 4
gpt4 key购买 nike

我有一个运行多个应用程序服务器的在线服务,其中有几个集合存储在 MongoDB 中。我以持续部署的方式工作,这基本上意味着如果一切顺利,代码更新会触发自动化测试,然后进行生产升级(这让事情变得有点复杂,但我相信这个问题也与非 CD 部署相关)。

这在大多数情况下都有效,但有时我的一个(或多个)核心数据模型会发生变化,在这种情况下,升级可能会弄乱内存中的数据,然后再弄乱数据库中的数据。

我举个例子:

假设我有一个简单的数据对象:

public class User {
private String id;
private String name;
private String[] friendsNames;
}

现在我决定将用户更改为:

public class User {
private String id;
private String name;
}

并将 friend 添加为一个单独的集合,它存储一个简单的对象,例如:

public class Friend {
private String name;
private String friendUserId;
}

这导致了一个问题。在更改数据结构以适应新数据模型之前我不能升级我的服务,在我关闭服务之前不能更改数据,否则旧版本将读取新数据版本并弄乱。

因此唯一的解决方案是关闭所有内容,在数据库上运行一些升级过程以更改所有内容,然后在运行新代码的情况下恢复服务。

所以最后的问题是:我想知道是否有版本数据的最佳实践解决方案(如果相关,特别是 Mongo),以便旧版本的应用程序能够继续使用旧数据,而新的应用程序将“见”新数据。我想到了像“UserV1.1”和“UserV1.2”这样的类版本,它们会在 mongo 中搜索合适的类版本,但如果有人已经想到并提出来,我不想“重新发明轮子”使用智能解决方案。

明确一点,我不关心对象历史,我只希望能够顺利升级应用程序版本。

最佳答案

欢迎来到“无模式”的乐趣。在我的应用程序中,我最终对对象进行了编码,以便它们可以经历“过渡”时期。也就是说,任何更改模型的版本都必须同时支持旧的和新的“模式”。我将这些比特投入生产,然后开始漫长的过程,将所有东西都转换过来。下一个版本,我们取消了过渡逻辑。它的屁股很痛,但它有效。更改架构需要两个版本。

关于java - 代码升级之间的 Mongodb 和 java 数据版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14953607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com