Hi Julian,

I also notice that your map function emits once for every *letter* in the 
author's name.

For instance having just one entry in the db:

{
   "_id": "01943fed255df913c33cab5c27b3bc7e",
   "_rev": "1-8288a511edad170e8e806281d0188033",
   "author": "Karl Marx",
   "title": "Das Kapital"
}


yields following results:

{"rows":[
{"key":null,"value":9}
]}

and, using the group=true clause for increased clarity, yields:

{"rows":[
{"key":" ","value":1},
{"key":"a","value":2},
{"key":"K","value":1},
{"key":"l","value":1},
{"key":"M","value":1},
{"key":"r","value":2},
{"key":"x","value":1}
]}
This could be another factor contributing to the slowness of your view.

Cheers. Bruno.




On 12/mar/2010, at 14.10, Julian Stahnke wrote:

> Hello!
> 
> I have a problem with a view being slow, even though it’s indexed and cached 
> and so on. I have database of books (–120,000 documents) and a map/reduce 
> function that counts how many books there are per author. I’m then calling 
> the view with ?group=true to get the list. I’m neither emitting nor 
> outputting any actual documents, only the counts. This results in an output 
> of about 78,000 key/value pairs that look like the following: {"key":"Albert 
> Kapr","value":3}.
> 
> Now, even when the view is indexed and cached, it still takes 60 seconds to 
> receive the output, using PHP’s cURL functions, the browser, whatever I’ve 
> tried. Getting the same output served from a static file takes only a 
> fraction of a second.
> 
> When I set limit=100, it’s basically instantaneous. I want to sort the output 
> by value though, so I can’t really limit it or use ranges. Trying it with 
> about 7,000 books, the request takes about 5 seconds, so it seems to be 
> linear to the number of lines being output?
> 
> I’m using CouchDB 0.10.1 (the one that’s in homebrew) on a 2006 MacBook Pro.
> 
> Am I doing anything wrong, or should this really take so long? I wasn’t able 
> to find any information about this—only about indexing being slow, but that 
> doesn’t seem to be my problem.
> 
> Maybe I should also mention that I’m an interaction design student who used 
> to be a front-end dev, but not a ‘real’ programmer.
> 
> Thanks for any help!
> 
> Best,
> Julian
> 
> 
> For reference, the map function:
> 
> function (doc)
> {
>    if (doc.author) {
>               for (i = 0; i < doc.author.length; i++) {
>                       emit(doc.author[i], 1);
>               }
>    } else {
>        emit(null, 1);        
>    }
> }
> 
> The reduce function: 
> 
> function (keys, values, rereduce)
> {
>    return sum(values);
> }
> 
> Some sample output:
> 
> {"rows":[
> {"key":null,"value":1542},
> {"key":"... Hans Arp ... /Konzept: Hans Christian Tavel .../","value":1},
> ---more rows---
> {"key":"Zwi Erich Kurzweil","value":1}
> ]}

Reply via email to