为什么 Map 的总合同要求在比较对象时使用 equals 方法在 hazelcast Map 中被违反



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

我遇到了一个问题,在这个问题中,我必须将一些元数据(lastModifiedTimeStamplastModifiedNode等(与密钥对象相关联,由于这种冲突,这是不可能的。

虽然我知道还有其他方法可以解决我的问题,但将这些属性作为密钥的一部分(然后重写hashCode()/equals()方法以排除元数据(将是一种更干净的方法。

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

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

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

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

  • 或者您可以在序列化&反序列化的表单->空间惩罚。

我相信还有其他原因;这些只是我脑海中能想到的几个。

署名-Jaromir Hamala-Hazelcast邮件列表。

最新更新