这更像是一个设计问题。我想知道为什么hazelcast使用对象的二进制(序列化(形式的hashCode()
和equals()
,而不是由复合键对象提供的形式。
我遇到了一个问题,在这个问题中,我必须将一些元数据(lastModifiedTimeStamp
、lastModifiedNode
等(与密钥对象相关联,由于这种冲突,这是不可能的。
虽然我知道还有其他方法可以解决我的问题,但将这些属性作为密钥的一部分(然后重写hashCode()
/equals()
方法以排除元数据(将是一种更干净的方法。
这是一个非常好的问题。这有多种原因,但其中之一可能是:
我们以序列化(=二进制(的形式保存密钥。在其他情况下,要使用域对象中的常规hashCode((和equals((,我们需要将它们反序列化(对象(格式。
仅此一事实就意味着:-您总是需要所有集群成员上的域对象的.class文件。当成员只处理序列化Blob时,您不需要这样做。
-
您可以只将键保持在反序列化格式,但随后必须为每个远程请求序列化它们->性能损失。Hazelcast是建立在一个假设之上的,您的大多数操作都是远程的。
-
或者您可以在序列化&反序列化的表单->空间惩罚。
我相信还有其他原因;这些只是我脑海中能想到的几个。
署名-Jaromir Hamala-Hazelcast邮件列表。