incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From J Chris Anderson <jch...@gmail.com>
Subject Re: selecting a random subset of a view
Date Mon, 28 Jun 2010 20:55:27 GMT

On Jun 28, 2010, at 1:51 PM, mickael.bailly@free.fr wrote:

> I find it a really great idea. If it can be set per design doc, of course.

Exactly. It should't be a huge patch if anyone wants to take it on. :)

Chris

> 
> Mickael
> 
> ----- Mail Original -----
> De: "J Chris Anderson" <jchris@apache.org>
> À: user@couchdb.apache.org
> Envoyé: Lundi 28 Juin 2010 21h34:16 GMT +01:00 Amsterdam / Berlin / Berne / Rome / Stockholm
/ Vienne
> Objet: Re: selecting a random subset of a view
> 
> 
> On Jun 28, 2010, at 12:28 PM, mickael.bailly@free.fr wrote:
> 
>> It's an error to do this if I read the doc correctly, because shows and lists functions
should be idempotent. It's specified in the wiki.
>> 
> 
> It would be fine to have a config option to suppress the Etags on show and list. Then
you'd have no risk of improperly caching the output here. For the time being, you can probably
configure an http proxy to ignore and strip the etags.
> 
> Chris
> 
>> Mickael
>> 
>> ----- Mail Original -----
>> De: "Jan Prieser" <j.prieser@hotornot.de>
>> À: user@couchdb.apache.org
>> Envoyé: Lundi 28 Juin 2010 18h37:38 GMT +01:00 Amsterdam / Berlin / Berne / Rome
/ Stockholm / Vienne
>> Objet: Re: selecting a random subset of a view
>> 
>> hi Mickael,
>> 
>> i've had the same problem and used the lists-feature from couch.
>> 
>> my list-function looks like this:
>> 
>> function(head,req) {
>>  function shuffle(ary) {
>>    function randOrd(){ return Math.round(Math.random()) - 0.5; }
>>    ary.sort( randOrd );
>>  }
>>  body={};
>>  eval('body='+req.body);
>>  out = head;
>>  out.rows = [];
>>  if(out.total_rows > out.offset) {
>>    while (row = getRow()) {
>>        out.rows.push(row);
>>    }
>>  }
>>  shuffle(out.rows);
>>  if (body && body.rlimit) {
>>    out.rows = out.rows.slice(-body.rlimit);
>>  }
>>  return toJSON(out) + '\n';
>> }
>> 
>> maybe you could use a range with startkey and endkey, if the number of 
>> rows is to big. I didn't test the performance with bigger datasets.
>> 
>> 
>> Am 28.06.2010 15:29, schrieb mickael.bailly@free.fr:
>>> Hello couchers,
>>> 
>>> how would you do to select a random subset of a view result (a simple view with
map only).
>>> 
>>> Example (I don't write the full view response array for clarity)
>>> 
>>> When called normally, my view returns :
>>> 
>>> {
>>> ...
>>> rows: [
>>> {id: aa1},
>>> {id: aa2},
>>> {id: aa3},
>>> {id: aa4},
>>> {id: aa5},
>>> {id: aa6},
>>> {id: aa7},
>>> {id: aa8},
>>> {id: aa9}
>>> ]
>>> }
>>> 
>>> And I want only three of those rows, randomly chosen. So I launch the magic "get
three random rows" feature, and it gives me :
>>> 
>>> {
>>> ...
>>> rows: [
>>> {id: aa5},
>>> {id: aa3},
>>> {id: aa6}
>>> ]
>>> }
>>> 
>>> The second time I launch the same magic "get three random rows" I got:
>>> {
>>> ...
>>> rows: [
>>> {id: aa7},
>>> {id: aa1},
>>> {id: aa5}
>>> ]
>>> }
>>> 
>>> Thanks for your advices
>>> 
>>> Mickael
> 


Mime
View raw message