[elephant-devel] Re: Some performance optimizations

Ian Eslick eslick at csail.mit.edu
Sun Dec 16 02:53:02 UTC 2007


On Dec 15, 2007, at 4:24 PM, Alex Mizrahi wrote:

> AM> of course this new implementation doesn't solve all issues, but at
> AM> least cursor operations now do not slow down with table growth,  
> to the
> AM> extent PostgreSQL does not.
>
> also important note about cursor implementation, which makes it  
> somewhat
> different from bdb cursor behaviour, -- it fetches batches of k/v  
> pairs at
> once, to mitigate communication overhead (default batch size is 10).  
> so,
> even if you delete values from btree, you have can still get them  
> from cache
> of cursor. it can read from cache only on next/prev operations,  
> operations
> like set fetch fresh data from database.
> effect of caching mostly will go away if you bind *cursor-window- 
> size* to 1.
> also, duplicated cursor does not inherit cache, so cursor-duplicate  
> can be
> used to flush caches.
>
> AM> won't it be better to define something like:
>
> AM> (defun remove-current-kv ()
> AM>  (multiple-value-bind (f k v)
> AM>  (when f
> AM>   (cursor-current *current-cursor*)
> AM>   (cursor-delete *current-cursor*)
> AM>   (cursor-set-range *current-cursor* k))))
>
> obviously that won't work..
> with db-postmodern we can use the fact that cursor works correctly
> regardless of if current key/value is still in db. so we can do:

This may be a silly question, but can't you just flush the cache on  
delete so it has to fetch the window again?

> (defun remove-current-kv ()
>   (cursor-delete (cursor-duplicate *current-cursor*)))
>
> i don't know if it works in other backends.. or maybe they do not make
> cursor uninitialized on delete and problem is non-existent?
>
> without this property, i'm afraid it's not possible to implement
> remove-current-kv without using details of current iteration  
> operation.
>
>
>
> _______________________________________________
> elephant-devel site list
> elephant-devel at common-lisp.net
> http://common-lisp.net/mailman/listinfo/elephant-devel




More information about the elephant-devel mailing list