[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