On Feb 1, 2008, at 6:03 AM, Tarek Ziadé wrote:
Since BTrees are written in C, I couldn't add my own conflict
manager to try
to merge buckets. (and this is
way over my head)
That doesn't really matter, because conflict-resolution can only
operate on one object at a time.
Is there a way to avoid these conflicts in BTree ?
Your best bet is to look at your application to see if you can avoid
the hot spot in the first place. For example, your test script creates
threads that allocate overlapping ids, guaranteeing conflicts. This is
probably a bug in your test script. A similar and common mistake is
to allocate keys sequentially. A better solution is to allocate keys
randomly (or sequentially within threads with random starting points).
I have plans to redo conflict resolution to:
- do resolution on the client, where the software is,
- make it more flexible,
- allow conflict-resolution on multiple objects
but I don't know when that will happen. In any case, there are often
better application-specific approaches to avoid the conflicts in the
For more information about ZODB, see the ZODB Wiki:
ZODB-Dev mailing list - ZODB-Dev@zope.org