[Zope-CMF] cmf zpt_generic/search - sequence_length is very slow for large collections, len () is much faster.

Florent Guillaume fg at nuxeo.com
Thu Dec 23 09:25:37 EST 2004


Henryk Paluch  <hpaluch at gitus.cz> wrote:
>    I'm currently doing few scalability tests on Zope 2.7.3/Fedore Core 3 
> Linux 700MHz CPU, 640MB RAM, 2x IDE disks, CMF 1.5.0. The portal was 
> filled with 66000 portal Document objects (3 CMF BTreefolders, each 
> contains about 20000 documents). Fulltext indexes are realized using 
> TextIndexNG and storage is currently BDB. I started simple profiling of  
> document search (using log and DateTime() ;-) and find that for large 
> sets the expression
> 
> length = batch_obj.sequence_length
> 
> took nearly same taime as search itself, e.g.:
>  items = ctool.searchResults(kw)
> 
> For example - when search returns about 7000 items then 
> ctool.searchResults(kw) take about 30s, but
> the batch_obj.sequence_length took another 30seconds!
> 
> It tried to replace
> length = batch_obj.sequence_length
> with:
> length = len(items)
> ane wow! Now it is instant (about 100ms) - significant speedup.

They're not the same.

batch_obj.sequence_length returns the length of all the results.

len(batch_obj) returns only the length of the current batch slice.
Code is in ZTUtils/Batch.py

Because the search is lazy, to know the total number of objects you have
to find all the results, there's no escaping this.

> Also when tried search of Document objects only (no fulltext, eg.)
> http://z154.gitus.dom:8080/portal/search?review_state=&SearchableText=&Title=&Subject%3Alist=&Description=&created.query%3Arecord%3Adate=1970%2F01%2F01+00%3A00%3A01+GMT&created.range%3Arecord=min&portal_type%3Alist=Document&listCreators=
> Original code took 90s to display results, but modified version took just 3s
> 
> Can anybody confirm/explain this, or even submit this optimization into 
> CMF tree (if correct ;-)?

Your optimization is such that it changes the number of previous/next
batches displayed.

Florent

-- 
Florent Guillaume, Nuxeo (Paris, France)   CTO, Director of R&D
+33 1 40 33 71 59   http://nuxeo.com   fg at nuxeo.com


More information about the Zope-CMF mailing list