2016-09-26 66 views
2

我createted二進制類型名稱爲「SOMETYPE」和filds:基於這種類型(通過CacheConfiguration.setQueryEntities)阿帕奇點燃二進制類型無效

f1:string 
f2:string 

和緩存。

現在我想將f1從字符串更改爲int。但我不想更改類型的名稱。

所以,當我試圖

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這是一個預期的行爲。

但是我怎樣才能刷新我的二進制類型matadata而不創建新的?

回答

1

是的,這是預期的行爲。首先,marshaller在Ignite以及元數據中都是全局的,所以銷燬緩存不會影響這一點。其次,二進制格式允許動態更改模式,但更改必須兼容。即,您可以更改和/或刪除字段,但不能更改它們的類型,因爲在這種情況下,使用較舊模式的客戶端將無法反序列化該對象(如果需要)。

+0

非常感謝您的澄清。所以據我所知,改變二進制類型字段類型的唯一方法是創建新的二進制類型? –

+0

正確。或者,您可以添加具有不同名稱的字段。 –