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 - [email protected] https://mail.zope.org/mailman/listinfo/zodb-dev
