在Hazelcast中更新关系数据

时间:2016-03-08 12:33:13

标签: java hazelcast hazelcast-imap

假设我有以下对象:

Bar bar = new Bar();
bar.setX(3);
Foo foo = new Foo();
foo.setY(4);
foo.setBar(bar);

hzFooMap.put(1, foo);
hzBarMap.put(1, bar);

使用上面的代码,Hazelcast将失去foo和bar之间的关系。就像在,如果我更新bar,那么foo也不会像这样更新:

Bar sameBar = hzBarMap.get(1);
sameBar.setX(20);
hzBarMap.put(1, sameBar);
Foo sameFoo = hzFooMap.get(1);

在上面的例子中,sameFoo.bar.x从未使用新值20更新。在Hazelcast中是否有办法让每个实例都更新?

我可以编写自己的引擎来记住存储的所有内容并更新我找到的每个对象的每个实例,但这会使写入过于昂贵。

或者我可以以某种方式在地图之间做出指示,但这会减慢读数...任何帮助解决这个问题都将非常感激!

1 个答案:

答案 0 :(得分:0)

Hazelcast不是关系数据库。您必须重新考虑使用数据的方式。

由于在IMap中访问对象相对便宜,您可以尝试按对象类型创建一个映射,并将键存储在依赖项中而不是目标对象中。或者使用某种"智能指针"它会自动解析此密钥。

但是afaik Hazelcast没有任何东西来管理对象之间的关系。如果你真的依赖这种属性,那么Hazelcast可能不适合你。