thanks, so... we can assume there will be maximum only 2 reduce phases? even if
there are hundreds of maps? just for curiosity.
Rohman
Antonio Rohman Fernandez
CEO, Founder & Lead Engineer
[email protected]
Projects
MaruBatsu.es
PupCloud.com
Wedding Album
On Mar 10, 2011, at 10:03 PM, Alexander Sicular wrote:
> Echo what Sean said. Also I have a post on my blog about pagination and riak.
> As Sean said, it is basically a reduce(sort) , reduce(slice) to get it
> working.
>
> -Alexander.
>
> @siculars on twitter
> http://siculars.posterous.com
>
> Sent from my iPhone
>
> On Mar 10, 2011, at 8:26, Antonio Rohman Fernandez <[email protected]>
> wrote:
>
>> Dear Sean,
>> thank you for your quick reply.
>>
>> "Your reduce function can (almost) never assume that it is operating on the
>> entire result set." -> wow! that totally kills my implementation... i wanted
>> to use the Reduce phase to cut the array as a Limit + Pagination ( like
>> LIMIT 10 PAGE 2 in SQL )... but if i don't have the full result set is
>> impossible and useless. I will have to get all the rows and then process it
>> outside Riak for that.
>>
>> "you must structure your reduce function such that it can receive as inputs
>> anything that it outputs" -> what do you mean with that? can i merge Reduce
>> phases? any example?
>>
>> i'm building a php MVC framework in top of Riak, and i would like to clone
>> from my SQL implementation as much functionality as i can, so people can
>> easily use Riak as if they were using MySQL/PostgreSQL/etc without noticing.
>> thanks.
>>
>> Rohman
>>
>>
>> Antonio Rohman Fernandez
>> CEO, Founder & Lead Engineer
>> [email protected]
>> Projects
>> MaruBatsu.es
>> PupCloud.com
>> Wedding Album
>>
>>
>> On Mar 10, 2011, at 8:50 PM, Sean Cribbs wrote:
>>
>>> Antonio,
>>>
>>> Sorry it's a little buried in the documentation, but be aware that Reduce
>>> phases *may* be called more than once (CouchDB calls this rereduce). What
>>> you experience in the last example is a demonstration of that: you must
>>> structure your reduce function such that it can receive as inputs anything
>>> that it outputs. The array/list that you return as the output will be
>>> concatenated with more values on the subsequent applications of the
>>> function. Your reduce function can (almost) never assume that it is
>>> operating on the entire result set.
>>>
>>> Sean Cribbs <[email protected]>
>>> Developer Advocate
>>> Basho Technologies, Inc.
>>> http://basho.com/
>>>
>>> On Mar 10, 2011, at 5:32 AM, Antonio Rohman Fernandez wrote:
>>>
>>>> Dear All,
>>>> I'm having a pretty annoying Javascript problem and would like to know if
>>>> is a bug (most likely) or if somebody has a solution.
>>>>
>>>> This is the sample data i'm playing with:
>>>> bucket -> 'testbucket'
>>>> key00001:{"name":"antonio","dob":1981,"country":"Spain"}
>>>> key00002:{"name":"rohman","dob":1982,"country":"Taiwan"}
>>>> key00003:{"name":"fernandez","dob":1983,"country":"US"}
>>>> key00004:{"name":"lee","dob":1984,"country":"Japan"}
>>>> key00005:{"name":"bruce","dob":1985,"country":"China"}
>>>>
>>>> MAP ONLY:
>>>> {"inputs":"testbucket","query":[{"map":{"language":"javascript","source":"function(v,k,a)
>>>> { return [v.values[0].data]; }"}}]}
>>>>
>>>> The Mapping phase ( nothing special, just gives back the values of all
>>>> keys in the bucket ) gives the correct data, an array of all my key's
>>>> values:
>>>> ["{\"name\":\"rohman\",\"dob\":1982,\"country\":\"Taiwan\"}",
>>>> "{\"name\":\"bruce\",\"dob\":1985,\"country\":\"China\"}",
>>>> "{\"name\":\"fernandez\",\"dob\":1983,\"country\":\"US\"}",
>>>> "{\"name\":\"antonio\",\"dob\":1981,\"country\":\"Spain\"}",
>>>> "{\"name\":\"lee\",\"dob\":1984,\"country\":\"Japan\"}"]
>>>>
>>>> REDUCE (try1:OK):
>>>> {"inputs":"testbucket","query":[{"map":{"language":"javascript","source":"function(v,k,a)
>>>> { return [v.values[0].data]; }"}},{"reduce":
>>>> {"language":"javascript","source":"function(v,a) { return v; }"}}]}
>>>>
>>>> This kinda useless Reduce phase returns the data as it is, even the order
>>>> is reversed... seems ok:
>>>> ["{\"name\":\"lee\",\"dob\":1984,\"country\":\"Japan\"}",
>>>> "{\"name\":\"fernandez\",\"dob\":1983,\"country\":\"US\"}",
>>>> "{\"name\":\"rohman\",\"dob\":1982,\"country\":\"Taiwan\"}",
>>>> "{\"name\":\"antonio\",\"dob\":1981,\"country\":\"Spain\"}",
>>>> "{\"name\":\"bruce\",\"dob\":1985,\"country\":\"China\"}"]
>>>>
>>>> REDUCE (try2:OK):
>>>> {"inputs":"testbucket","query":[{"map":{"language":"javascript","source":"function(v,k,a)
>>>> { return [v.values[0].data]; }"}},{"reduce":
>>>> {"language":"javascript","source":"function(v,a) { return [v[1]]; }"}}]}
>>>>
>>>> This Reduce phase just return the 2nd item array[1] of the result... seems
>>>> ok too!:
>>>> ["{\"name\":\"fernandez\",\"dob\":1983,\"country\":\"US\"}"]
>>>>
>>>> REDUCE (try3:!!!!!):
>>>> {"inputs":"testbucket","query":[{"map":{"language":"javascript","source":"function(v,k,a)
>>>> { return [v.values[0].data]; }"}},{"reduce":
>>>> {"language":"javascript","source":"function(v,a) { return [v[3]]; }"}}]}
>>>>
>>>> This Reduce phase SHOULD return the 4th item of the array... but returns
>>>> NULL!!!!:
>>>> [null] <-- WTF... works for [v[0]], [v[1]], [v[2]] but fails from [v[3]]...
>>>>
>>>> REDUCE (try4:!!!!!):
>>>> {"inputs":"testbucket","query":[{"map":{"language":"javascript","source":"function(v,k,a)
>>>> { return [v.values[0].data]; }"}},{"reduce":
>>>> {"language":"javascript","source":"function(v,a) { return [v]; }"}}]}
>>>>
>>>> This Reduce phase returns the data inside an array... but with a wrong
>>>> patter [[1,1,1,[1,1]]]!!!:
>>>> [
>>>> ["{\"name\":\"lee\",\"dob\":1984,\"country\":\"Japan\"}",
>>>> "{\"name\":\"fernandez\",\"dob\":1983,\"country\":\"US\"}",
>>>> "{\"name\":\"rohman\",\"dob\":1982,\"country\":\"Taiwan\"}",
>>>> ["{\"name\":\"antonio\",\"dob\":1981,\"country\":\"Spain\"}", <---- See
>>>> the weird extra array?
>>>> "{\"name\":\"bitch\",\"dob\":1985,\"country\":\"China\"}"]
>>>> ]
>>>> ]
>>>>
>>>> that is transformed to this:
>>>>
>>>> Array (
>>>> [0] => {"name":"lee","dob":1984,"country":"Japan"}
>>>> [1] => {"name":"fernandez","dob":1983,"country":"US"}
>>>> [2] => {"name":"rohman","dob":1982,"country":"Taiwan"}
>>>> [3] => Array (
>>>> [0] => {"name":"antonio","dob":1981,"country":"Spain"}
>>>> [1] => {"name":"bruce","dob":1985,"country":"China"}
>>>> )
>>>> )
>>>>
>>>> I don't know what is going on with the javascript Reduce phase... but is
>>>> killing me...
>>>> return v --> OK
>>>> return [v[0]] --> OK
>>>> return [v[1]] --> OK
>>>> return [v[2]] --> OK
>>>> return [v[3]] --> ERROR ( and so on )
>>>>
>>>> any ideas? thanks
>>>> Rohman
>>>>
>>>>
>>>>
>>>> Antonio Rohman Fernandez
>>>> CEO, Founder & Lead Engineer
>>>> [email protected] Projects
>>>> MaruBatsu.es
>>>> PupCloud.com
>>>> Wedding Album
>>>>
>>>> _______________________________________________
>>>> riak-users mailing list
>>>> [email protected]
>>>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>>
>>
>> _______________________________________________
>> riak-users mailing list
>> [email protected]
>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
_______________________________________________
riak-users mailing list
[email protected]
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com