ES> Are cached slots usable yet (at least in a single-threaded situation)? 
When I use ":cached t" in my slot definitions, I get errors.

i postmodern backend rather than doing caching on a slot level we're doing 
it on btree level. that is, get-value and (setf get-value)
functions do lookups/writes in a cache hash table ((btree-id, key) -> 
value), and this works pretty well, as everything gets
cached. if underlying hash table is weak, it could automatically control its 
size.

the tricky thing, however, is to do it in transaction-safe way. simpliest 
way to do it transaction-safe is to use cache
only within a single transaction, and throw it out afterwards -- then you'll 
never have stale entries. that doesn't work
well of you have lots of small transactions, though. db-postmodern has a 
caching mode where it does additional
changes tracking to invalidate cache entries properly.

but if you know that your application is single-threaded, for example, you 
can do it in easier way -- just keep
using single cache as long as no transactions do rollback, if they do 
rollback you'll have to delete it.

with multiple threads in single process you can handle this via relatively 
easy invalidation protocol, i guess.
(i'm not sure how exactly, though, at moment, as i'm more familiar with MVCC 
concurrency model rather
than bdb's lock based. maybe with lock based model you don't have to do 
much.)

so, what i was going to say, adding caching for your specific application 
can be fairly easy -- you just need
to instrument db-bdb code a little, adding just a few dozen of lines of 
code. so you can just try to do this,
instead of relying on weird slot-caching protocol.




_______________________________________________
elephant-devel site list
elephant-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/elephant-devel

Reply via email to