2017-06-30 1 views
1

Sans test, parce que je suis coincé dans un train et à court de batterie ...Hazelcast IMap - Mises à jour simultanées à la même clé, valeur différente

Je dois déterminer si oui ou non les mises à jour simultanées imap Hazelcast sont thread safe mettant à jour la même clé mais des valeurs différentes de cette clé.

Par exemple:

Disons que j'ai 2 fils différentes mise à jour de la même clé imap ...

Pour toutes fins utiles, cette carte se présente comme suit:

key: {value1: 1, value2: 2} 

Un fil dit,

"I am updating value1 to 3" 

l'autre fil dit (en même temps)

"I am updating value2 to 4". 

Comment Hazelcast gère-t-il cela?

Le résultat final ressemblera-t-il à ce qui suit?

key: {value1: 3, value2: 4} 

Répondre

4

Hazelcast utilise des partitions. La clé est hachée pour trouver la bonne partition pour cette entrée.

Chaque partition est mono-thread, il y a seulement une partition-thread gérant chaque partition. Deux mises à jour pour une seule clé sont donc gérées par une seule partition-thread.

Si les deux clés mises à jour atterrissent dans la même partition, ces opérations seront séquentielles sur une seule partition-thread. Si chaque touche atterrit dans une partition différente, différents threads géreront chaque mise à jour.

Je ne comprends pas vraiment votre notation: key: {value1: 1, value2: 2} -> il ressemble à une carte imbriquée.

vous dites aussi: the same key but different values of that key. -> sur une carte, chaque touche a une seule valeur (à moins que la valeur est une collection ou une carte)

+0

Oui, donc dans mon exemple de la clé « valeur » est en fait une carte. Vous dites qu'une partition est mono-thread. Cela signifie-t-il que Hazelcast verrouillera la clé pour chaque mise à jour de sa valeur? Je veux m'assurer que je n'ai pas besoin de verrouiller la clé moi-même. J'ai différents processus qui mettront à jour différentes variables dans la carte de valeur simultanément. Ils ne mettront jamais à jour la même variable, mais ils mettront à jour la même clé. –

+1

Pas besoin de verrouiller. Chaque mise à jour de valeur pour une seule touche est à un seul thread. (Peu importe quelle est la valeur réelle). –

+0

comment éviter d'avoir à verrouiller si deux threads tentent de créer la clé en même temps? Dans ce cas, je voudrais que le second thread utilise ma logique de mise à jour au lieu de ma logique de création. –