[infinispan-dev] [ISPN-116] Async cache store: aggregation of multiple changes on a single key

Mircea Markus mircea.markus at jboss.com
Tue Jul 7 06:02:23 EDT 2009


Galder Zamarreno wrote:
> Hi,
>
> Re: https://jira.jboss.org/jira/browse/ISPN-116
>
> I can see two ways of providing such feature:
>
> 1. Rather than using a queue, using a data structure similar to the 
> one used in the data container so that when a newer value for a key 
> already present in the queue is present, the value can be swapped (map 
> like lookup required on the key so that O(1) is maintained) while 
> maintaining queue-like FIFO operations required to empty it.
Is the FIFO order required? We apply the 'final state' when we do the 
flush of the structure, I don't think the order of the operation is 
relevant.
If this is the case, our structure might be a Map, with null values for 
removed keys, as a convention.
>
> 2. Based on suggestion coming amin59 in 
> http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4240980#4240980, 
> make the current queue only store keys and make the draining process 
> query the cache for the latest value. Because from the time the data 
> was put to the cache to the time it's stored, the data could have 
> expired or had been removed all together, such query would need to 
> make sure it doesn't go to the cache loader again. Also, if the data 
> had been removed, how would the Async store know that from 
> cache.get()? The queue would need to record somehow that a key was 
> actually removed.
>
> The benefit of the 1st option is that we can take advantage of fast 
> drainTo() like operations when draining it, and also the fact that no 
> contention is added to the cache itself. The downside would be the 
> need for a more complex data structure.
>
> The benefit of the 2nd option is the keeping a simple queue, less 
> complex data structure, but requires that each time a key is to be 
> drained, we have to query the cache. This could slow down the draining 
> process.
draining process being slowed down is not critical, as it is performed 
async.
>
> My preference is with 1. but for to use it, I'd need the data 
> container collection to be made more generic.
>
> Thoughts?




More information about the infinispan-dev mailing list