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.) Shane _______________________________________________ For more information about ZODB, see http://zodb.org/ ZODB-Dev mailing list - ZODB-Dev@zope.org https://mail.zope.org/mailman/listinfo/zodb-dev