[Zope] For the record

Peter Bengtsson peter at fry-it.com
Wed Mar 19 14:55:52 EDT 2008


On 19/03/2008, Dieter Maurer <dieter at handshake.de> wrote:
> Peter Bengtsson wrote at 2008-3-18 17:38 +0000:
>
> >I wanted to see how much faster brain.getObject() would be if the
>  >returned object was located in a BTreeFolder versus a normal folder so
>  >I wrote a benchmark that created about 10,000 light simple objects in
>  >two distinctly different containers and each with a ZCatalog that has
>  >a PathIndex.
>  >
>  >I would expect the BTreeFolder parenting calls of brain.getObject() to
>  >be much faster but I found that there was NO DIFFERENCE. wtf?!
>
>
> If you access many (most) objects, these accesses may be even
>  more expensive with a "BTreeFolder" than with a standard folder.
>  This is not that difficult to explain:
>
>   When you access a normal folder, with the folder all child
>   references are loaded. When you later access the folder
>   again (and it has not yet been flushed from the ZODB cache),
>   no loading is necessary.
>
>   When you access a "BTreeFolder", no child references are loaded.
>   Thus, elementary access to a "BTreeFolder" is much more
>   efficient.
>   When you access a child in a "BTreeFolder", then all child
>   references are loaded that are in the same bucket as the
>   access child. In addition, all nodes on the path
>   from the "BTreeFolder" to this bucket are loaded.
>   When you access many children, you have a good chance,
>   that you have accessed at least on child in each bucket.
>   In this case, you have loaded all child references (as
>   in the standard folder case). In addition, you have
>   loaded the complete access structure.
>
>  To summarize: an isolated access to a child of a large "BTreeFolder"
>  is usually much more efficient than an isolated access to a standard
>  folder with the same children. However, the advantage of the
>  "BTreeFolder" decreases when lots of children are accessed.
>
...because they're cached in the normal folder.

So, to rewrite my benchmark I'd have to flush the cache between each fetch?
I don't mind because the app itself has little traffic but individual
pages are slow.

>
>
>  --
>
> Dieter
>


-- 
Peter Bengtsson,
work www.fry-it.com
home www.peterbe.com
hobby www.issuetrackerproduct.com


More information about the Zope mailing list