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}
> ]}