【问题标题】:Hazelcast data transfer across nodesHazelcast 跨节点数据传输
【发布时间】:2017-11-17 15:54:24
【问题描述】:

如果我在集群 node1 和 node2 中有两个 hazelcast 节点

如果我将 <key1,value1> 插入 imap,并假设 node1 拥有 <key1,value1>(primary),则当 node1 存储数据时,它会将 <key1, value1> 转换为字节并保存。

1) 这些数据如何传输到 node2。当<key1, value1>作为字节传输到node2时,node2是直接保存这些字节还是先反序列化成各自的类型再序列化回字节保存?

2) 如果新字段添加到 value1 类型并且 node1 重新启动。当数据从node2备份到node1时,value1的字节是否会传输到node1
a) 将其反序列化为 node1 中的 value1 类型,该类型由新字段组成,然后序列化回字节并存储在 node1 中或
b) value1 的 node2 中的字节传输到 node1 直接存储而无需任何转换,并且这些字节不包含添加到 value1 类型的字段?

【问题讨论】:

  • 1) 你的意思是 Hazelcast 如何在其他节点上创建备份?否则 Hazelcast 没有理由将数据传输到集群中的其他成员,除非您有一个也嵌入了 HC 的应用程序,显式调用读取操作。
  • 2) 不确定您的问题是什么。每次必须在成员或成员-客户之间传输时,数据都会被序列化和反序列化。向条目添加新字段和重新启动节点之间没有任何联系。查看序列化和其他相关文档:docs.hazelcast.org/docs/3.9/manual/html-single/…docs.hazelcast.org/docs/3.9/manual/html-single/…

标签: hazelcast


【解决方案1】:

在 Hazelcast 中,备份数据以二进制形式存储。

默认情况下,备份是同步的,即在更新备份副本之前不会返回 PUT 请求。所以备份不会不同步。

Hazelcast 支持 3 种内存存储格式 BINARY(默认,访问速度)、OBJECT(适用于入口处理器和查询)和 NATIVE(键和值存储在堆外)。 当使用 BINARY 格式时,只需要在客户端 BINARY 进行反序列化,因此速度更快。

如果值以 OBJECT 格式存储,则返回值的更改不会影响存储的实例。在这种情况下,返回的实例不是实际的,而是一个克隆。因此,返回后对对象所做的更改不会反映实际存储的数据。类似地,当一个值被写入映射并且该值以 OBJECT 格式存储时,它将是 put 值的副本。因此,存储后对对象所做的更改将不会反映存储的数据。

【讨论】:

    猜你喜欢
    • 2021-09-04
    • 1970-01-01
    • 2011-11-04
    • 2019-01-20
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多