【问题标题】:Hazelcast 3.4: how to avoid deserialization from near cache and get original itemHazelcast 3.4:如何避免从近缓存反序列化并获取原始项目
【发布时间】:2015-06-17 17:15:03
【问题描述】:

从版本 3.X 开始,Hazelcast 返回原始对象的副本,该副本存储在启用了近缓存的分布式地图中,而不是在版本 2.5 中返回原始对象。

这种行为允许对存储在地图中的条目进行本地修改,并且 GET 操作很快。

现在,在版本 3.X 中,它将二进制对象存储在近缓存中,并且它会导致对每个 GET 进行反序列化,这会显着影响性能。 是否可以将 Hazelcast 3.4.2 Map 的 Near Cache 配置为返回对原始对象的引用,而不是原始条目的副本?

【问题讨论】:

    标签: hazelcast


    【解决方案1】:

    在<near-cache>部分,如果你设置了

    • <in-memory-format>OBJECT</in-memory-format>
    • 和
    • <cache-local-entries>true</cache-local-entries>

    您应该返回相同的实例。

    这对客户和会员都有效。

    【讨论】:

    • 根据他们的文档,在这种情况下,实体将被反序列化并再次序列化 - 额外的性能成本
    • @Dmitry 我已经测试过了,它可以工作。您在文档中的什么地方看到的?
    • docs.hazelcast.org/docs/latest/manual/html/… 另外,在调试Hazelcast代码的时候,可以看到NearCache里面有一个ConcurrentMap,里面存储了CacheRecord的值,其中value是BINARY存储的。
    • @Dmitry,描述了map 的行为,而不是near-cache。确保上面的这两个设置在 <near-cache> 部分中,而不是直接在 <map> 部分中。
    • 哦,你的意思是配置近缓存内存表示。有效!但是,在近缓存文档的示例中,省略了此配置参数。非常感谢。
    【解决方案2】:

    我不认为有办法获得原始项目。 为避免反序列化,您可以尝试设置

    <in-memory-format>OBJECT</in-memory-format> 
    

    在&lt;near-cache&gt; 配置中。这样,hazelcast 将以对象形式将数据存储在 &lt;near-cache&gt; 中,并且不需要反序列化。但我想这只有在您在客户端配置 &lt;near-cahce&gt; 时才有效,因为如果 &lt;near-cache&gt; 在节点上,您仍然需要序列化才能将对象从节点传递到客户端。

    【讨论】:

    • 小心共享可变对象:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多