[infinispan-dev] ISPN-359 and grouping entries for distribution
Sanne Grinovero
sanne.grinovero at gmail.com
Tue Apr 13 05:50:39 EDT 2010
2010/4/13 Manik Surtani <manik at jboss.org>:
>
> On 13 Apr 2010, at 07:55, Emmanuel Bernard wrote:
>
> No need, Marcus had it :)
> I'd do something like
> cacheFactory.usingContext()
> .colocateOn(groupName)
> .getCache() (*)
> (*) assuming the ability to get a cache is
>
> Or is the collocation business something that must be done at the cache
> level temporarily / for a single operation (thus hosted on the cache
> interface)?
>
> The latter. So something like:
> cache.inGroup("coloGrp1").put("k1", "v1");
> cache.inGroup("coloGrp1").put("k2", "v2");
> cache.inGroup("coloGrp2").put("k3", "v3");
> cache.inGroup("coloGrp2").put("k4", "v4");
> would result in k1 and k2 being placed on the same nodes, regardless of what
> the 2 keys individually hash to. Same with k3 and k4.
> Another question (slightly off-topic) - would people then be tempted to use
> this as a scoping mechanism:
> cache.inGroup("coloGrp1").put("name", "Manik");
> cache.inGroup("coloGrp1").put("location", "London");
> cache.inGroup("coloGrp2").put("name", "Emmanuel");
> cache.inGroup("coloGrp2").put("location", "Paris");
> since this will *not* work. The cache still primarily is a collection of K
> -> V mappings and in the above case the last 2 lines will effectively
> overwrite the 1st 2 lines.
> Cheers
> Manik
>
rightfull concern, I wouldn't personally have expected that but I'm
biased as I follow this thread; it's not hard to imagine some people
falling in this trap.
Sanne
>
>
>
> On 12 avr. 2010, at 15:30, Vladimir Blagojevic wrote:
>
> Why don't we ping Emmanuel for an advice. He's done similar API design in
> Hibernate IIRC.
> On 2010-04-12, at 8:58 AM, Mircea Markus wrote:
>
> On 12 Apr 2010, at 15:36, Manik Surtani wrote:
>
> Re: subject (see https://jira.jboss.org/jira/browse/ISPN-359), there are a
> couple of approaches that could be taken:
> 1. Don't use key.hashcode() as the seed in determining to which nodes an
> entry is mapped, but instead on a well-known method or annotated method
> (e.g., int getGroupID() or a method annotated with @GroupId). The way I see
> it, this approach has:
> + Will work, no additional overheads of AtomicMaps
> - Cost (reflection)
> - Intrusive (what if users have no control over the key class, e.g., String
> keys?)
> 2. Additional API methods on the cache - cache.put(K, V, G),
> cache.putAll(Map, G), etc.
> + Non-intrusive
> - Overhead of AtomicMaps + additional entries for mappings
> + or - (depending on how you look at it) all keys in the group will be
> locked together, etc, a side-effect of using AtomicMaps
> My pref is for approach #2. In terms of implementation, here is what I have
> in mind:
> * A GroupingInterceptor that intercepts the call early on if the call is a
> put(K, V, G) or something similar.
> * Breaks up the call to a put(K, G) and a getAtomicMap(G).put(K, V).
> Wrapped in a tx to ensure atomicity.
> * get(K), etc intercepted as well, replaced with getAtomicMap(get(K)).get(K)
> * remove(K), etc intercepted with getAtomicMap(get(K)).remove(K)
> One of the issues with the API approach is that it heavily pollutes the
> Cache API. It will double the number of put() methods on Cache (currently
> 18 variants of put, including ones that take in lifespans and maxIdles,
> async versions that return futures, etc.) Perhaps this could be in an
> additional sub-interface interface? GroupedCache? Or is this degree of
> method overloading not too confusing?
>
> what about using an Flag-like api?
> cache.inGroup("groupName").put(...).
> or an "parametrized" flag:
> cache.withFlag(Flags.getColocateFlag("grouName").put(...)
> as long as we can create "parametrized" flags as bellow, I like the second
> approach
>
> Cheers,
> --
> Manik Surtani
> manik at jboss.org
> Lead, Infinispan
> Lead, JBoss Cache
> http://www.infinispan.org
> http://www.jbosscache.org
>
>
>
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>
> --
> Manik Surtani
> manik at jboss.org
> Lead, Infinispan
> Lead, JBoss Cache
> http://www.infinispan.org
> http://www.jbosscache.org
>
>
>
>
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>
More information about the infinispan-dev
mailing list