【问题标题】:How Ignite stores the value on heapIgnite 如何将值存储在堆上
【发布时间】:2017-02-08 16:42:24
【问题描述】:

我正在考虑使用 Ignite 提供的数据网格功能。我不清楚 Apache Ignite 的一个方面。

我想知道,每当我将一个对象放入 Ignite Cache(它只在堆上存储条目,因为没有启用非堆)时,它是序列化对象并将其存储在堆上还是将对象存储为是吗?

如果我从运行在同一个 JVM 上的进程(使用 IgniteCache#get )访问存储的值(Ignite 值存储在其堆中),Ignite 会首先反序列化该值,然后将其提供给我的进程吗?

如果问题的答案是肯定的,那么我想知道是否有一种解决方法可以绕过序列化的开销来提高缓存的性能?

【问题讨论】:

    标签: caching ignite gridgain


    【解决方案1】:

    Ignite 以二进制格式存储值,默认情况下,每次读取时都会反序列化值。

    如果您设置CacheConfiguration.copyOnRead,反序列化的值将与二进制形式一起共享。这可以提高读取性能,但也会增加内存消耗。此外,您应该避免以这种方式读取变异对象。

    另一个避免反序列化的选项是使用withKeepBinary() 标志。设置后,缓存将返回 BinaryObject 实例而不是反序列化对象。更多详情请参考此页面:https://apacheignite.readme.io/docs/binary-marshaller

    【讨论】:

    • 如果我使用 Binary Marshaller,我仍然需要执行反序列化才能将值作为对象获取?
    • 上述所有内容都适用于任何编组器(当然withKeepBinary() 除外,BinaryMarshaller 是唯一的)。
    猜你喜欢
    • 2021-05-23
    • 2019-06-20
    • 2020-11-17
    • 2012-01-31
    • 2018-07-04
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2021-01-25
    相关资源
    最近更新 更多