【问题标题】:Apache Ignite - how to evolve schema/properties of an annotated classApache Ignite - 如何演变带注释的类的模式/属性
【发布时间】:2018-09-21 22:34:07
【问题描述】:

我正在使用带有类注释的 Apache Ignite,如 "Query Configuration by Annotations" 中所述。

我们应该如何处理类变化?例如,如果我从我的应用程序的 v1 和 v2 添加一个新属性会发生什么? 以前的值是否反序列化?我可以指定一个默认值吗?

我找不到有关此主题的任何文档。我尝试了一个简单的用例,似乎新属性为空。我该如何处理?

更新

根据@dmagda 的建议,我尝试在我的类上添加一个属性,使用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

解决了我的问题。这是因为我的课程是用 scala 编写的,具有一些 scala 特定类型('Map',...)。我的应用程序使用客户端模式连接到 Ignite,因此当从 sqlline 实用程序执行 UPDATE 时,Ignite 无法反序列化类型。 现在我将我的课程切换为普通 POJO,现在我可以更新架构和更新数据了。

【问题讨论】:

  • 除了@dmagda 的回答,请参阅this doc,其中解释了对象的存储方式以及限制和数据模型的变化。
  • 你能提供整个堆栈跟踪吗?
  • @alamar 我使用sqlline 收到此错误,我没有堆栈跟踪。这里是完整的输出:0: jdbc:ignite:thin://127.0.0.1/> UPDATE "devices".DEVICEDTO SET TENANTID = 'updated-tenant' WHERE DEVICEID = 'device-00'; Error: class org.apache.ignite.binary.BinaryObjectException: Failed to unmarshal object with optimized marshaller (state=50000,code=0)
  • @DavideIcardi 您应该查看服务器节点的日志以获取完整的堆栈跟踪。
  • @alamar 谢谢!查看日志,我发现问题是序列化问题。在 Ignite 服务器上,我没有 scala 集合类。现在我使用了普通的 POJO,并且能够正确地从 sql 更新我的数据库。感谢您的建议。

标签: java ignite


【解决方案1】:

只需通过添加一个新字段来更新您的 Java 类,它将被存储并可以毫无问题地读取。您可能会将 null 视为新字段的值,原因有两个:

  • 您的应用程序未将其设置为任何特定值
  • 您正在从 Ignite 读取一个旧对象,该对象在您更新类之前存储,因此新字段没有出现在那里。

如果您需要使用 SQL 访问新字段,请使用 ALTER TABLE 命令将该字段添加到 SQL 架构中。

【讨论】:

  • 谢谢@dmagda。值类型呢?例如Int 属性在 Ignite 中不存在时将具有 0 值?谢谢
  • @DavideIcardi,是的,它将是该类型的默认值(null 或 0)。
  • @dmagda 非常感谢您的建议。是否可以从 0/null 更改新字段的默认值?我尝试使用ALTER TABLE 添加列并使用UPDATE 更新字段。但我收到一个错误:Error: class org.apache.ignite.binary.BinaryObjectException: Failed to unmarshal object with optimized marshaller (state=50000,code=0)。我已使用此信息更新了问题...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多