[Zope-dev] BTreeFolder2.objectIds() - accessing _tree.keys() slow

sean.upton at uniontrib.com sean.upton at uniontrib.com
Wed Jan 11 18:03:57 EST 2006


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:

1. Can this be considered safe in all cases (I'll code this behavior on a
Subclass or in a monkey patch)?

2. If yes to #1, is there an appropriate place to lobby for this to be
changed, perhaps in BTreeFolder2 product itself?



Index: BTreeFolder2.py
===================================================================
--- BTreeFolder2.py     (revision 41285)
+++ BTreeFolder2.py     (working copy)
@@ -341,10 +341,14 @@
         # Returns a list of subobject ids of the current object.
         # If 'spec' is specified, returns objects whose meta_type
         # matches 'spec'.
+
+        mti = self._mt_index
+        if spec is None:
+            spec = mti.keys()
+
         if spec is not None:
             if isinstance(spec, StringType):
                 spec = [spec]
-            mti = self._mt_index
             set = None
             for meta_type in spec:
                 ids = mti.get(meta_type, None)

Thanks,
Sean

+----------------------------------------------------------+
 Sean Upton                              SignOnSanDiego.com
 Site Technology Supervisor     The San Diego Union-Tribune
 619.718.5241                 sean.upton at signonsandiego.com
 350 Camino De La Reina                 San Diego, CA 92108

  Plone Powered!  plone.org  ++  python.org  ++  zope.org  
+----------------------------------------------------------+ 



More information about the Zope-Dev mailing list