[Zope-dev] BTreeFolder2.objectIds() - accessing _tree.keys() slow
Shane Hathaway
shane at hathawaymix.org
Thu Jan 12 02:48:27 EST 2006
sean.upton at uniontrib.com wrote:
> I have very large BTreeFolder2 (CMFMember via BaseBTreeFolder in Archetypes)
> - has about 260k items in _tree - objectIds() is painfully slow, as is
> self._tree.keys() - I've casually observed using the meta type index to get
> the object ids is many orders of magnitude faster.
>
> Hacking objectIds() as follows (diff against trunk pasted inline) - gettting
> ids off of the meta type index for all used meta types - seems to make
> things much quicker. Two questions:
Are you sure this actually works? _mt_index.keys() is supposed to
provide a list of all meta_types used in the folder. To get the object
ids from it, you'd need something like this:
ids = []
for d in self._mt_index.values():
ids.extend(d.keys())
The structure of _mt_index is documented in a comment:
_mt_index = None # OOBTree: { meta_type -> OIBTree: { id -> 1 } }
(It's strange that I chose to use an OIBTree instead of an OOTreeSet.
Maybe I didn't know about the set support in the BTree module at the time.)
Shane
More information about the Zope-Dev
mailing list