On 10/12/2011 04:53 PM, Shane Hathaway wrote:
> Given the choice to structure the cache as {(oid, tid): (state,
> last_tid)}, a simple way to use the cache would be to get the last
> committed tid from the database and use that tid for the lookup key.
> This would be extremely efficient until the next commit, at which point
> the entire cache would become irrelevant and would have to be rebuilt.
> Therefore, most of the interesting parts of the cache code in RelStorage
> are focused on simply choosing a good tid for the cache lookup operation.

Furthermore... anytime the cache chooses a tid other than the most 
recently committed tid for the lookup operation, there is a risk that it 
will choose a tid that is too old, leading to consistency errors. I have 
searched deeply for any such holes and closed some obscure ones, but 
it's important to acknowledge the risk.

(BTW, I worked with a client who saw many consistency errors that seemed 
to be caused by the cache, but the problem turned out to be a major flaw 
in Oracle's documentation of read only mode. The cache operated flawlessly.)

For more information about ZODB, see http://zodb.org/

ZODB-Dev mailing list  -  ZODB-Dev@zope.org

Reply via email to