[infinispan-dev] Long time no hear, or ISPN-78 continued

Olaf Bergner olaf.bergner at gmx.de
Tue Oct 4 16:06:12 EDT 2011


Am 04.10.11 20:15, schrieb Mircea Markus:
> On 15 Sep 2011, at 17:50, Olaf Bergner wrote:
>
>> Hello,
>>
>> it's been a while ... I'm the guy who a few months ago implemented 
>> Infinispan's Spring support and started to work on ISPN-78 - Large 
>> Object Support. Due to very personal reasons and a job change that 
>> required my undivided attention that latter endeavour went into a 
>> hiatus. Sorry for that.
>>
>> Provided there's still interest in the community I'd like to continue 
>> working on ISPN-78. But first let's see where we stand today. What 
>> follows is in large part a reiteration of what was already said a few 
>> months ago, but not all of us are blessed with an infallible memory.
>>
>> At https://github.com/obergner/infinispan/tree/t_ispn78 you will find 
>> a very simple solution based on the concept of a StreamingHandler, to 
>> be obtained via Cache.getStreamingHandler():
>>
>> public interface StreamingHandler<K> {
>> void writeToKey(K key, InputStream largeObject);
>> OutputStream writeToKey(K key);
>> InputStream readFromKey(K key);
>> boolean removeKey(K key);
>> StreamingHandler<K> ; withFlags(Flag... flags );
>> }
>>
>> This solution basically works yet needs some love before it could be 
>> left out into the wild. I think it's not too bad but in the interim I 
>> have come to prefer a different solution I would like to start 
>> working on, namely a dedicated StreamingCache that's completely 
>> separate from the regular Cache.
> I guess you'd  obtain a StreamingCache from the CacheManager rather 
> than obtaining it from a Cache?
Yes, that's my current line of thinking, at least.
>>
>> Pros:
>>
>> 1. I think that it's highly unlikely that users would want store 
>> large objects as well as "regular" objects within the same cache 
>> instance. In my experience these two classes of objects are treated 
>> entirely differently on the application level.
>>
>> 2. Moreover I *suspect* - though I know next to nothing about these 
>> matters - that a user would have a hard time finding a set of tuning 
>> parameters to satisfy the needs of both regular as well as large objects.
>>
>> 3. Keeping large object support as part of the regular cache *might* 
>> entail that the same code paths would have to be optimized for both 
>> regular as well as large objects. This *could* prove difficult in the 
>> long term.
>>
>> 4. A separate StreamingCache would open up the possibility of 
>> defining default settings tailored to the needs of large objects. 
>> Furthermore I *suspect* that many cache settings would be irrelevant 
>> for large objects.
>>
>> 5. The semantics of regular and large object caches are sufficiently 
>> different to warrant a clean separation. Large objects will very 
>> likely not be replicated across different nodes, and I *suspect* that 
>> we will have a hard time supporting full-blown transactions for them.
>>
>> Cons:
>>
>> 1. Increased complexity.
>>
>> 2. Increased maintenance burden. Well, maybe. On the one hand, 
>> there's one more kind of cache to take care of. On the other hand the 
>> regular cache wouldn't have to pay attention to the streaming cache's 
>> needs.
>>
>> 3. Higher implementation effort ;-)
>>
>> So my proposed course of action is:
>>
>> 1. Introduce a new interface StreamingCache that looks exactly like 
>> the StreamingHandler above.
>>
>> 2. Rename StreamingHandlerImpl to StreamingCacheImpl.
>>
>> 3. Introduce a new concept, ChunkStore, a store for - you guessed it 
>> - chunks.
>>
>> 4. Modify StreamingCacheImpl to delegate to ChunkStore instead of Cache.
> Why not create a fully flagged Cache under the hood and use that from 
> the StreamingCacheImpl - this way you'd be able to reuse the current 
> implementation. Same for the configuration, the StreamingCacheConfig 
> would basically wrap an Configuration + some additional fields.
It sounds like something I should at least try as it significantly 
simplifies things. Maybe the devil's in the detail, but I will probably 
start down that route.
>>
>> 5. And now for the fun part: create StreamingCacheConfiguration, a 
>> basic, stripped down, bare bones, no frills variant of Configuration. 
>> Whoa, that configuration code sure looks ... interesting. Could 
>> probably need some pointers here.
>>
>> 6. Pray that I won't need a custom DataContainer and so forth.
> you might actually, as I imagine one might want to use eviction and 
> passivation etc.. That would be solved with the cache approach I 
> described previously.
Well, that cache approach just grew even more compelling.
>>
>> What do you think? Does that make sense? Does it make basically 
>> sense, yet you would suggest some improvements? Is it utter nonsense?
> +1 i.e. makes total sense to me.
OK, then I'll give this a try. Thx.
>>
>> The current implementation basically works and entails minimal 
>> changes to the existing code base. The proposed solution is not 
>> exactly rocket science, yet considerably more work. So I'd like to 
>> make sure that I don't head in the wrong direction.
>
>
>
>
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev

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


More information about the infinispan-dev mailing list