我正在考虑使用Ignite提供的数据网格功能。我不清楚Apache Ignite的一个方面。
我想知道每当我将一个对象放入一个Ignite Cache(它只在堆上存储条目,因为没有启用了关闭堆)时,它是否将对象序列化并将其存储在堆上,或者将对象存储为是吗?
如果我从同一个JVM(其中存储了Ignite Value的Heap)上运行的进程(使用IgniteCache#get)访问存储的值,那么Ignite会首先反序列化该值然后提供给我的进程吗?
如果问题的答案是肯定的,那么我想知道是否有一种解决方法,我可以绕过序列化的开销来提高缓存的性能?
答案 0 :(得分:0)
Ignite以二进制格式存储值,默认情况下,每次读取时都会对其进行反序列化。
如果设置CacheConfiguration.copyOnRead
,则反序列化的值将与二进制形式一起共享。这可以提高读取性能,但也会增加内存消耗。你也应该避免以这种方式改变对象。
避免反序列化的另一个选择是使用withKeepBinary()
标志。设置后,缓存将返回BinaryObject
实例而不是反序列化对象。有关详细信息,请参阅此页:https://apacheignite.readme.io/docs/binary-marshaller