[Zope-dev] Catalog performance
John Barratt
jlb at ball.langarson.com.au
Sun Sep 21 20:23:50 EDT 2003
zhimin at iss.nus.edu.sg wrote:
> Just my 2 cents observation...
> I ran this code and monitored the page "Cache extreme detail" in ZMI >
> ControlPanel > DebugInfo.
> With this method, the object was not loaded. However the intermediate
> objects that the unrestrictedTraverse() passed by were loaded into memory.
> e.g. If doc.getPath() is '/x/y/z/myobject', myobject was not loaded but x,
> y, and z were loaded into memory.
This is a good point, and for catalog based retrievals of objects may be
difficult (but not impossible) to avoid excess objects remaining in the
cache. If however you are doing a walk of part of your ZODB tree
(unlike 'randomly' accessing objects from the ZODB like this) you could
ensure that you do a depth first traversal, then as you come back up the
tree, traversed nodes that weren't active before the walk would be
deactivated.
eg something like this external method :
def traverseTree(self):
''' Traverse the tree and do something. '''
was_ghost = self._p_changed is None
for ob in self.objectValues():
traverseTree(ob)
# XXX Do something with self here :
self.doSomething()
if was_ghost:self._p_deactivate()
This should ensure that any 'traversed over' nodes that were previously
not active are de-activated.
JB.
More information about the Zope-Dev
mailing list