incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Simon Wex" <si...@simonwex.com>
Subject Re: Basic re-understanding of reduce.
Date Wed, 24 Dec 2008 03:25:07 GMT
Damien,

So this just the system reducing to enable group_level=3|2|1|0 (since
my key is max 3 elements)?  That does explain what I'm seeing in the
logs. Very clever.

The interesting thing is that if I query the reduce in futon, I see
only 10 rows (of 10) and the maximum value is 15. Though if I hit the
view up with a simple GET request, I see what I expected.  This may be
a firefox caching issue, I'll dig a bit deeper and report anything of
interest.

Thanks for the speedy reply.

-Simon

On Tue, Dec 23, 2008 at 6:14 PM, Damien Katz <damien@apache.org> wrote:
> You are using the reduce properly.  CouchDb reduces everything regardless of
> the keys. So what you are seeing is couchdb doing full reductions of
> modified nodes during index updates. This gives you the option of reducing
> across arbitrary key ranges.
>
> -Damien
>
> On Dec 23, 2008, at 8:53 PM, Simon Wex wrote:
>
>> I have been working on a few projects with couchdb, some of which are
>> in production so it came as a complete surprise today when I realized
>> I don't understand CouchDB's reduce implementation.
>>
>> I have a map that emits a complex key and a count of 1 for each
>> document. From that I end up with a data set like so:
>>
>>
>> {"id":"89c285e3-109f-4ce8-9a11-f5219c6a0b36","key":[341235,"auctioned"],"value":1},
>>
>> {"id":"ab37e07a-d19e-4ddb-b0ab-7da8b5e24a03","key":[341235,"auctioned"],"value":1},
>>
>> {"id":"b5cf63e0-1892-41df-833b-84468365a08a","key":[341235,"auctioned"],"value":1},
>>
>> {"id":"89c285e3-109f-4ce8-9a11-f5219c6a0b36","key":[341235,"teasered","125"],"value":1},
>>
>> {"id":"3341b67a-c789-492e-a9e7-1a3a99540c59","key":[341235,"teasered","127"],"value":1},
>>
>> {"id":"7e6d6077-619b-4cec-8cc2-d2e8779cdc15","key":[341235,"teasered","127"],"value":1}...
>>
>> Now what I want from my reduce if the above was the only output is to
>> end up with a set like so:
>>
>> {"key":[341235,"auctioned"],"value":3},
>> {"key":[341235,"teasered","125"],"value":1},
>> {"key":[341235,"teasered","127"],"value":2}...
>>
>> I thought my reduce statement would have to look simply like so:
>>
>> function(keys, values) {
>>  return sum(values);
>> }
>>
>> Much to my surprise, when I didn't get the numbers expected, I did
>> some logging from my reduce function:
>>
>> {
>>  "keys": [
>>   [[341263,"teasered","125"],"e13d8135-844e-4fec-bf3a-ed189359b30c"],
>>   [[341263,"teasered","127"],"ae447f40-51cd-406e-8a65-f5a7f163d20e"], ...
>>  ],
>> "values": [1,1,...],
>> "rereduce": false
>> }
>>
>> I thought that the reduce function was only called with results of the
>> same key. Essenially I think I was assuming that the functionality of
>> reduce when rereduce is true was always the case. Can someone help me
>> understand why a reduce function would get multiple keys for a single
>> reduce? Also, what should my reduce then look like?
>>
>> Thanks for the help, Simon.
>
>



-- 
Simon Wex
CTO and Co-Founder
Zeep
http://zeepmobile.com
http://zeepmedia.com

Mime
View raw message