Apache Ignite 二进制类型失效

Apache Ignite binary type invalidation

我创建了名称为 'SomeType' 和字段为:

的二进制类型
f1:string
f2:string

并基于此类型进行缓存(通过CacheConfiguration.setQueryEntities)。

现在我想将 f1 从字符串更改为整数。但是我不想更改类型的名称。

所以当我尝试

ignite.destroyCache(cacheName)

然后我正在创建新的缓存(具有相同的名称和二进制类型),缓存填充时出现异常:

org.apache.ignite.binary.BinaryObjectException: Wrong value has been set [typeName=SomeType, fieldName=f1, fieldType=String, assignedValueType=int]

正如我从 http://apache-ignite-users.70518.x6.nabble.com/Ignite-client-reads-old-metadata-even-after-cache-is-destroyed-and-recreated-td5800.html 了解到的那样,这是预期的行为。

但是如何在不创建新元数据的情况下刷新我的二进制元数据?

是的,这是预期的行为。首先,marshaller 在 Ignite 中是全局的,元数据也是如此,因此销毁缓存不会影响这一点。其次,二进制格式允许动态更改架构,但更改必须兼容。也就是说,您可以更改 and/or 删除字段,但不能更改它们的类型,因为在这种情况下,使用旧模式的客户端将无法反序列化对象。