On 11/25/11 8:51 AM, Selcuk AYA wrote: > I looked at the code some more and think that using read-write locks > might not be a good idea. There are cases where a cursor is held for a > partition and the same partition is changed. This makes it hard. > > My suggestion is to use a ConcurrentSkipListMap implementation of > java( http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentSkipListMap.html > ) rather than our own implementation of avl as the backing sorted map > for our avl partition. We can build cursors over this map using the > iterator provided by this map ( I did something similar to provide a > cursor for the index changes of a txn). This iterator is weakly > consistent, that is, it might show future changes but will show a view > of the map at least as of the time of its creation. This works for us. > Even if cursor shows future changes, our txn layer above should take > care of this and provide a transactionally consistent view. > > The cost of the common operations would be amortized o(logn) with > this map. So, this is similar to AVL tree cost. Note that, we would > need to use ConcurrentSkipListMaps to store dup values. > > Let me know if you think this sounds OK with you. Sounds good to me. What is important is that we guarantee a o(logn) for search in this tree, and of course consistency, everything else is not really important (ie insertion can be slow). -- Regards, Cordialement, Emmanuel Lécharny www.iktek.com