Hi,

Actually you don't need more than the built-in _sum. consider;

map:

function(doc) {
  emit(doc.key, [doc.foo, doc.bar, doc.baz]);
}

reduce:
_sum

this will sum each of the fields and return a 3-item array.

> On 13 Oct 2020, at 20:37, Jonathan Hall <fli...@flimzy.com> wrote:
> 
> So looking through the code that uses this, it looks like the main use I've 
> had for custom reduce functions is summing multiple values at once.  A rough 
> equivalent of 'SELECT SUM(foo),SUM(bar),SUM(baz)'.
> 
> The first thing that comes to mind to duplicate this functionality without a 
> custom reduce function would mean building one unique index for each value 
> that needs to be summed, which I expect would be a lot less efficient.
> 
> But maybe I'm overlooking a more clever and efficient alternative.
> 
> Jonathan
> 
> 
> On 10/13/20 6:31 PM, Robert Samuel Newson wrote:
>> Hi,
>> 
>> Yes, that's what I'm referring to, the javascript reduce function.
>> 
>> I'm curious what you do with custom reduce that isn't covered by the 
>> built-in reduces?
>> 
>> I also think if custom reduce was disabled by default that we would be 
>> motivated to expand this set of built-in reduce functions.
>> 
>> B.
>> 
>>> On 13 Oct 2020, at 17:06, Jonathan Hall <fli...@flimzy.com> wrote:
>>> 
>>> To be clear, by "custom reduce functions" you mean this 
>>> (https://docs.couchdb.org/en/stable/ddocs/ddocs.html#reduce-and-rereduce-functions)?
>>> 
>>> So by default, only built-in reduce functions could be used 
>>> (https://docs.couchdb.org/en/stable/ddocs/ddocs.html#built-in-reduce-functions)?
>>> 
>>> If my understanding is correct, I guess I find it a but surprising. I've 
>>> always thought of map/reduce of one of the core features of CouchDB, so to 
>>> see half of that turned off (even if it can be re-enabled) makes me squint 
>>> a bit. And it is a feature I use, so I would not be in favor of deprecating 
>>> it entirely, without a clear proposal/documentation for an 
>>> alternative/work-around.
>>> 
>>> Based on the explanation below, it doesn't sound like there's a technical 
>>> reason to deprecate it, but rather a user-experience reason. Is this 
>>> correct?
>>> 
>>> If my understanding is correct, I'm not excited about the proposal, but 
>>> before I dive further into my thoughts, I'd like confirmation that I 
>>> actually understand the proposal, and am not worried about something else ;)
>>> 
>>> Jonathan
>>> 
>>> 
>>> On 10/13/20 5:48 PM, Robert Samuel Newson wrote:
>>>> Hi All,
>>>> 
>>>> As part of CouchDB 4.0, which moves the storage tier of CouchDB into 
>>>> FoundationDB, we have struggled to reproduce the full map/reduce 
>>>> functionality. Happily this has now happened, and that work is now merged 
>>>> to the couchdb main branch.
>>>> 
>>>> This functionality includes the use of custom (javascript) reduce 
>>>> functions. It is my experience that these are very often problematic, in 
>>>> that much more often than not the functions do not significantly reduce 
>>>> the input parameters into a smaller result (indeed, sometimes the output 
>>>> is the same or larger than the input).
>>>> 
>>>> To that end, I'm asking if we should deprecate the feature entirely.
>>>> 
>>>> In scope for this thread is the middle ground proposal that Paul Davis has 
>>>> written up here;
>>>> 
>>>> https://github.com/apache/couchdb/pull/3214
>>>> 
>>>> Where custom reduces are not allowed by default but can be enabled.
>>>> 
>>>> The core _ability_ to do custom reduces will always been maintained, this 
>>>> is intrinsic to the design of ebtree, the structure we use on top of 
>>>> FoundationDB to hold and maintain intermediate reduce values.
>>>> 
>>>> My view is that we should merge #3214 and disable custom reduces by 
>>>> default.
>>>> 
>>>> B.
>>>> 

Reply via email to