2016-03-08 50 views
0

更新关系数据可以说我有下列对象:在Hazelcast

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之间的关系。如,如果我更新栏,然后foo将不会被更新,像这样:

Bar sameBar = hzBarMap.get(1); 
sameBar.setX(20); 
hzBarMap.put(1, sameBar); 
Foo sameFoo = hzFooMap.get(1); 
在上面的例子中

,sameFoo.bar.x从未更新与20的新的价值是否有办法在Hazelcast中更新每个实例?

我可以写我自己的引擎,记住这里的一切存储和更新的每一个对象,我觉得每一个实例,但这样会使写太贵了。

或者我可以以某种方式使地图之间的指针,但是这会减慢读取......解决这个问题的任何帮助,将不胜感激!

回答

0

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

作为一个IMAP的访问对象是相对便宜的,你可以尝试有一个地图的对象类型,并存储在依赖关系,而不是目标对象的关键。或者使用某种自动解析该键的“智能指针”。

但据我所知Hazelcast没有什么管理对象之间的关系。如果你真的依赖这种属性,那么也许Hazelcast不适合你。

+0

是否HZ允许递归调用map.get()?例如,如果我试图做某种超级指针,那么在我从map.get(...)返回之前,需要将对象重新拼回到一起。我曾尝试过,因为一个线程尝试访问多个分区而导致threadstateexcepton错误 – user972276