Apache Ignite - 如何发展带注释的 class 的 schema/properties
Apache Ignite - how to evolve schema/properties of an annotated class
我正在使用带有 class 注释的 Apache Ignite,如 "Query Configuration by Annotations" 中所述。
我们应该如何处理 class 变化?例如,如果我从我的应用程序的 v1 和 v2 添加一个新的 属性 会发生什么?
以前的值是否反序列化?我可以指定默认值吗?
我找不到关于此主题的任何文档。我尝试了一个简单的用例,似乎新属性为空。我该如何处理?
更新
根据@dmagda 的建议,我尝试在我的 class 上添加一个 属性,使用 ALTER TABLE MYTABLE ADD COLUMN myNewProperty varchar;
将其添加到 table,然后使用 ALTER TABLE MYTABLE ADD COLUMN myNewProperty varchar;
更改它的值UPDATE MYTABLE SET myNewProperty='myDefaultValue'
.
但不幸的是运行住所UPDATE
我得到了异常:Error: class org.apache.ignite.binary.BinaryObjectException: Failed to unmarshal object with optimized marshaller (state=50000,code=0)
是否可以通过使用 SQL 更改新字段来更新现有记录?怎么样?
更新 2
解决了我的问题。这是因为我的 class 是用 scala 编写的,具有一些特定于 scala 的类型('Map',...)。我的应用程序使用客户端模式连接到 Ignite,因此当从 sqlline
实用程序执行 UPDATE 时,Ignite 无法反序列化类型。
现在我将 class 切换为普通 POJO,现在我能够更新模式和更新数据。
只需通过添加新字段来更新您的 Java class,它将被存储并且可以毫无问题地回读。出于两个原因,您可能会将 null 视为新字段的值:
- 您的应用程序未将其设置为任何特定值
- 您正在从 Ignite 读回一个旧对象,该对象在您更新 class 之前存储,因此新字段不存在。
如果您需要使用 SQL 访问新字段,请使用 ALTER TABLE 命令将字段添加到 SQL 架构。
我正在使用带有 class 注释的 Apache Ignite,如 "Query Configuration by Annotations" 中所述。
我们应该如何处理 class 变化?例如,如果我从我的应用程序的 v1 和 v2 添加一个新的 属性 会发生什么? 以前的值是否反序列化?我可以指定默认值吗?
我找不到关于此主题的任何文档。我尝试了一个简单的用例,似乎新属性为空。我该如何处理?
更新
根据@dmagda 的建议,我尝试在我的 class 上添加一个 属性,使用 ALTER TABLE MYTABLE ADD COLUMN myNewProperty varchar;
将其添加到 table,然后使用 ALTER TABLE MYTABLE ADD COLUMN myNewProperty varchar;
更改它的值UPDATE MYTABLE SET myNewProperty='myDefaultValue'
.
但不幸的是运行住所UPDATE
我得到了异常:Error: class org.apache.ignite.binary.BinaryObjectException: Failed to unmarshal object with optimized marshaller (state=50000,code=0)
是否可以通过使用 SQL 更改新字段来更新现有记录?怎么样?
更新 2
解决了我的问题。这是因为我的 class 是用 scala 编写的,具有一些特定于 scala 的类型('Map',...)。我的应用程序使用客户端模式连接到 Ignite,因此当从 sqlline
实用程序执行 UPDATE 时,Ignite 无法反序列化类型。
现在我将 class 切换为普通 POJO,现在我能够更新模式和更新数据。
只需通过添加新字段来更新您的 Java class,它将被存储并且可以毫无问题地回读。出于两个原因,您可能会将 null 视为新字段的值:
- 您的应用程序未将其设置为任何特定值
- 您正在从 Ignite 读回一个旧对象,该对象在您更新 class 之前存储,因此新字段不存在。
如果您需要使用 SQL 访问新字段,请使用 ALTER TABLE 命令将字段添加到 SQL 架构。