2016-03-08 1 views
0

Disons que j'ai les objets suivants:Mise à jour des données relationnelles dans 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); 

Avec le code ci-dessus, Hazelcast va perdre la relation entre foo et bar. Comme dans, si je mets à jour la barre, puis foo ne sera pas mis à jour aussi bien comme ceci:

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

dans l'exemple ci-dessus, sameFoo.bar.x n'a jamais été mis à jour avec la nouvelle valeur de 20. Est-il possible en Hazelcast pour avoir toutes les instances mises à jour?

Je pourrais écrire mon propre moteur qui se souvient où tout est stocké et met à jour CHAQUE instance de chaque objet que je trouve, mais cela rendrait les écritures trop chères. Ou je pourrais faire des pointeurs entre les cartes, mais cela ralentirait les lectures ... Toute aide pour résoudre ce problème serait grandement appréciée!

Répondre

0

Hazelcast n'est pas une base de données relationnelle. Vous devez repenser la façon dont vous consommez vos données. Comme l'accès à un objet dans un IMap est relativement bon marché, vous pouvez essayer d'avoir une carte par type d'objet, et stocker une clé dans les dépendances au lieu de l'objet cible. Ou utilisez une sorte de "pointeur intelligent" qui résout automatiquement cette clé.

Mais afaik Hazelcast n'a rien à gérer la relation entre les objets. Si vous comptez vraiment sur ce type de propriétés, alors Hazelcast n'est peut-être pas adapté pour vous.

+0

Est-ce que HZ autorise les appels récursifs à map.get()? Par exemple, si j'essayais de faire un super pointeur, il faudrait que je rassemble l'objet avant de revenir de map.get (...). J'ai essayé ceci dans le passé une got des erreurs de threadstateexcepton dues à un fil unique essayant d'accéder à plusieurs partitions – user972276