incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Damien Katz <dam...@apache.org>
Subject Re: Basic re-understanding of reduce.
Date Wed, 24 Dec 2008 02:14:41 GMT
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.


Mime
View raw message