[ZODB-Dev] Re: What makes the ZODB slow?
Florent Guillaume
fg at nuxeo.com
Fri Jun 23 13:17:54 EDT 2006
On 23 Jun 2006, at 17:55, Andreas Jung wrote:
> --On 23. Juni 2006 17:51:35 +0200 Florent Guillaume <fg at nuxeo.com>
> wrote:
>> BTrees perform best when keys' prefixes are randomly distributed.
>> So if your application generates keys like 'foo001', 'foo002',...
>> you'll
>> get lots of conflicts. Same for consecutive integers in IOBTree.
>
> hm..are you sure about that?
It all depends on the concurrency for the use of these consecutive
ids really.
The problem is bucket splits. A bucket split cannot be resolved by
conflict resolution code of BTrees.
Let's say B is the size of a bucket and you have N leaf buckets in
the whole BTree.
If you use consecutive ids, you'll get a bucket split every B/2
inserts (assuming buckets are half-filled on average).
If you use random ids, you'll get a bucket split on average every N*B/
2 inserts.
All this roughly (I'm ignoring details like internal nodes).
If two processes concurrently use sequential ids from the same pool
at the same time, I'd say there one in B chances of getting a
conflict error. It's only one in (N*B)^2 if the ids are random.
All back-of-the-envelope calculations of course...
Florent
--
Florent Guillaume, Nuxeo (Paris, France) Director of R&D
+33 1 40 33 71 59 http://nuxeo.com fg at nuxeo.com
More information about the ZODB-Dev
mailing list