我创建了名为“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]
但是如何在不创建新元数据的情况下刷新我的二进制元数据?
最佳答案
是的,这是预期的行为。首先,marshaller 在 Ignite 中是全局的,元数据也是如此,因此销毁缓存不会影响这一点。其次,二进制格式允许动态更改架构,但更改必须兼容。也就是说,您可以更改和/或删除字段,但不能更改它们的类型,因为在这种情况下,使用旧模式的客户端将无法反序列化对象。
关于java - Apache Ignite 二进制类型失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39697393/