1

这更像是一个设计问题。我想知道为什么 hazelcast 使用对象hashCode()equals()二进制(序列化)形式而不是复合键对象提供的形式。

我遇到了一个问题,我必须将一些元数据(等)与关键对象相关联lastModifiedTimeStamplastModifiedNode由于这种违规行为,这是不可能的。

虽然我确实知道还有其他方法可以解决我的问题,但将这些属性作为键的一部分(然后覆盖hashCode()/equals()方法以排除元数据)将是一种更简洁的方法。

4

1 回答 1

1

这个问题问得好。这有多种原因,但其中之一可能是:

我们以序列化(=二进制)形式保存密钥。在其他情况下,要使用域对象中的常规 hashCode() 和 equals(),我们需要将它们设为反序列化(对象)格式。

仅此事实就意味着: - 您总是需要所有集群成员上的域对象的 .class 文件。当成员只处理序列化的 blob 时,您就不需要了。

  • 您可以仅将密钥保留为反序列化格式,但是您必须为每个远程请求序列化它们-> 性能损失。Hazelcast 是建立在您的大多数操作都是远程的假设之上的。

  • 或者您可以在序列化和反序列化表单上维护密钥 -> 空间损失。

我敢肯定还有其他原因;这些只是我能想到的一些。

学分 - Jaromir Hamala - Hazelcast 邮件列表。

于 2015-10-07T13:42:04.163 回答