[infinispan-dev] Feedback from Mobicents Cluster Framework on top of Infinispan 5.0 Alpha1

Manik Surtani manik at jboss.org
Wed Jan 5 14:32:09 EST 2011


On 4 Jan 2011, at 16:12, Eduardo Martins wrote:

>>>>> 4) AtomicMap doubt
>>>>> 
>>>>> I read in the Infinispan blog that AtomicMap provides colocation of
>>>>> all entries, is that idea outdated? If not we may need a way to turn
>>>>> that off :) For instance would not that mean the Tree API does not
>>>>> works well with distribution mode? I apologize in advance if I'm
>>>>> missing something, but if AtomicMap defines colocation, AtomicMap is
>>>>> good for the node's data map, but not for the node's childs fqns.
>>>>> Shouldn't each child fqn be freely distributed, being colocated
>>>>> instead with the related node cache entry and data (atomic)map? Our
>>>>> impl is kind of an "hybrid" of the Tree API, allows cache entries
>>>>> references (similar to childs) but no data map, and the storage of
>>>>> references through AtomicMap in same way as Tree API worries me.
>>>>> Please clarify.
>>>> 
>>>> Each FQN has underneath an AtomicMap, so each you won't find yourself finding k,v pairs belonging to a particular Fqn in different nodes.
>>>> 
>>>> We make no guarantees wrt child fqn nodes. So, just cos FQN B is child of FQN A, it does not mean that the atomic map of B will be in same node as atomic map of B.
>>> 
>>> Before I proceed with my reasoning, please clarify, the colocation
>>> within AtomicMap is real? If I store data there, all data will be
>>> colocated?
>> 
>> Yup, all *data* stored in the AtomicMap will be located in the same node. It's treated as a single entity.
>> 
> 
> Ok, then lets think on the Tree API, typically/optimally you add, get
> and remove a specific node in same cluster node/zone, iterating
> through a node's childs is rare and usually without much perf
> constraints. With current impl the node's child map entries are
> colocated, since each node does that through an AtomicMap with child's
> last FQN element, IMHO this is not great for performance:
> 
> 1. Consider parent node P in node N1
> 2. In node N2, add a P child, this goes to N1. Adding P Child also
> creates the child cache entries, all 3 seem to be colocated through
> hashCode(), correct me if I'm wrong. Lets assume all hash ideally to
> local node N2.
> 3. In node N2, get P child, this may go to N1 if we use P, skips it if
> use Cache.get(...)
> 4. In node N2, remove P child, this needs to go to N1
> 
> Are you following the issue, if P is a popular parent node (which
> happens a lot to root childs), N1 will be hammered by other nodes!


What you said above is not exactly true.  A TreeNode contains 2 AtomicMaps - one for data and one for structure.  The DataMap contains the K/V attribute pairs on the node.  The StructureMap contains information about children.  Firstly, these 2 AtomicMaps aren't necessarily colocated.  This is OK, since you rarely update structure (adding/removing children) and data (attributes on a node) in the same transaction.  Secondly, there is nothing that says parents and children are colocated since they use different keys.  So,

/a/b/c <-- could be on N1
/a/b/c/d <-- could be on N2

so transactions doing stuff on /a/b/c and /a/b/c/d won't be affecting the same node - unless it is structure that is changing.  So as per your example above, in step 2, all 3 don't necessarily go to the same node.  Also if you do something like TreeCache.getNode() with an FQN, you don't walk through parents.

https://github.com/infinispan/infinispan/blob/master/tree/src/main/java/org/infinispan/tree/TreeCache.java#L181

HTH
Manik
--
Manik Surtani
manik at jboss.org
twitter.com/maniksurtani

Lead, Infinispan
http://www.infinispan.org



-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/infinispan-dev/attachments/20110105/14223368/attachment-0001.html 


More information about the infinispan-dev mailing list