【发布时间】:2018-02-04 05:11:54
【问题描述】:
我在开发一个相当大的项目时遇到了一个问题。假设我将一个对象存储在 no-sql db 中,例如 Google Cloud Datastore,但随后我向此类添加了一个新字段,然后一旦我进行查询并获取此对象,新字段的值将是什么?它是否取决于序列化程序或数据库或编程语言? 例如在java中:
public class Car{
private int numOfDoors;
public Car(int nod){
numOfDoors = nod;
}
}
然后我将对象 car1 保存到 Datastore,但之后我更新了我的代码。
public class Car{
private int numOfDoors;
private Set<String> tags;
private boolean condition;
public Car(int nod, Set<String> tags, boolean cod){
numOfDoors = nod;
this.tags = tags;
condition = cod;
}
public Set<String> getTags(){
return tags;
}
}
如果我刚刚更新代码并调用 get 到刚刚从 Datastore 获取的对象时调用 getTags() 会发生什么?
如果标签和条件不在构造函数中怎么办?喜欢:
private Set<String> tags = new HashSet<>();
删除一个字段呢? 谢谢!
【问题讨论】:
-
这取决于特定的后端以及您用来访问它的库/工具。大多数情况下,您会在 Java 类中获得默认值。
-
“它是否取决于序列化程序或数据库或编程语言?” - 可能,所有这些。如果您想要一个有用的答案,您将需要更具体。但是,有一个基本原则:没有魔法。如果某些东西似乎需要一个神奇的实现,那么它可能不受支持。
-
阅读this article。它是关于 Python 的,但它让您了解在 Datastore 中更新架构时会发生什么
标签: java google-app-engine nosql google-cloud-datastore consistency