About Protocol Buffers

Alex De la rosa alex.rosa.box at gmail.com
Mon Jun 23 11:46:29 EDT 2014


Hi Luc,

Cool, thanks! I can see how to do it now:

bucket = client.bucket_type('counter_bucket').bucket('counters')

Will be checking it more to see what can I do that is not yet documented.

The Python documentation says at one point: "Some requests are only valid
over 'http', and will always be sent via those transports, regardless of
which protocol is preferred.". Can I know which requests are HTTP only? is
it for something in particular? or they will be made into PBC at some point?

Thanks,
Alex


On Mon, Jun 23, 2014 at 5:29 PM, Luc Perkins <lperkins at basho.com> wrote:

> Alex,
>
> It sounds like you're working mostly with the lower-level Python API at
> the moment, but if you want to use the higher-level parts of the client for
> interacting with Riak Data Types (sets, maps, and counters), there is a
> tutorial here:
>
>
> https://raw.githubusercontent.com/basho/basho_docs/2.0.0/source/languages/en/riak/dev/using/data-types.md
>
> You'll see the Python samples interspersed throughout. I know it's
> annoying because it's just raw Markdown at the moment, but this will be
> deployed to our normal docs site <http://docs.basho.com/riak/2.0.0beta1/>
>  soon.
>
> Hope that helps!
>
> Luc
>
>
> On Mon, Jun 23, 2014 at 4:54 PM, Alex De la rosa <alex.rosa.box at gmail.com>
> wrote:
>
>> Hi Sean,
>>
>> Thanks for your quick reply, is what i suspected, moreover after checking
>> riak.proto file in the source. So mainly the contents to store (json or not
>> json) is not PB encoded semantically, but is encoded as a "body" field in
>> the Message. That's good though.
>>
>> Another question... is there any estimated date for Riak 2.0 to be
>> released? I'm playing with 2.0 beta 1 and the "list" object is a must-have
>> for me (same as the "counter" object that can be found in Riak 1.4).
>>
>> Is crucial for me to decide which technologies to use in my new project;
>> so far Riak 2.0 seems a great option, but I can not build under a beta.
>>
>> Another question now that I talk about "counters"... how do you do it
>> with Python's PBC? I can see the functions: RiakClient.get_counter()
>> and RiakClient.update_counter()... but... how do you create a new counter?
>> how do you specify the special connotations to the bucket?
>>
>> Thanks,
>> Alex
>>
>>
>> On Mon, Jun 23, 2014 at 4:38 PM, Sean Cribbs <sean at basho.com> wrote:
>>
>>> Hi Alex,
>>>
>>> By default, the client assumes new objects use JSON as the encoding. The
>>> protocol buffers are only used on the wire to encode Riak's protocol. If
>>> you want to use your own protobuffs messages, I suggest two things:
>>>
>>> 1. Decide on a `content_type` property for each of your data types and
>>> be sure to assign that to each key as you create it. I've used
>>> 'application/pb-person' as an example below.
>>>  2. Register encoder and decoder functions [1] on the RiakClient object,
>>> like so:
>>>
>>> client.set_decoder('application/pb-person', Person.ParseFromString)
>>> client.set_encoder('application/pb-person', lambda x:
>>> x.SerializeToString())
>>>
>>> [1]
>>> http://riak-python-client.readthedocs.org/en/latest/client.html#serialization
>>>
>>> Cheers,
>>>
>>>
>>> On Mon, Jun 23, 2014 at 9:19 AM, Alex De la rosa <
>>> alex.rosa.box at gmail.com> wrote:
>>>
>>>> Hi there,
>>>>
>>>> I just installed RIAK 2.0 beta 1 and was playing with the Python
>>>> library using 'pbc' (Protocol Buffers).
>>>>
>>>> test.py
>>>>
>>>> --------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------
>>>> import riak
>>>> client = riak.RiakClient(host ='127.0.0.1', http_port = 8098, pb_port =
>>>> 8087, protocol = 'pbc')
>>>> bucket = client.bucket('people')
>>>>
>>>> key = bucket.new('alex', data={"username":"Alex","age":33})
>>>> key.store()
>>>>
>>>> print bucket.get('alex').encoded_data
>>>>
>>>> --------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------
>>>>
>>>> it works perfectly and it prints {"username": "Alex", "age": 33} as it
>>>> should print.
>>>>
>>>> However, I'm not using a proto file (person.proto) and compiling it
>>>> into binary for Python to use it... something like:
>>>>
>>>> person.proto
>>>>
>>>> --------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------
>>>> message Person {
>>>>   required string username = 1;
>>>>   required int32 age = 2;
>>>> }
>>>>
>>>> --------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------
>>>>
>>>> xxx.py
>>>>
>>>> --------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------
>>>> import person_pb2
>>>> person = person_pb2.Person()
>>>> person.username = "Alex"
>>>> person.age = 33
>>>> data = person.SerializeToString()
>>>>
>>>> --------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------
>>>>
>>>> Am I using the 'pbc' interface wrong? however, on Riak's examples page
>>>> is done also without the "proto" file... I'm a bit confused at the moment
>>>> as it changed the way I normally would use Protocol Buffers.
>>>>
>>>> Thanks,
>>>> Alex
>>>>
>>>> _______________________________________________
>>>> riak-users mailing list
>>>> riak-users at lists.basho.com
>>>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>>>
>>>>
>>>
>>>
>>> --
>>> Sean Cribbs <sean at basho.com>
>>> Software Engineer
>>> Basho Technologies, Inc.
>>> http://basho.com/
>>>
>>
>>
>> _______________________________________________
>> riak-users mailing list
>> riak-users at lists.basho.com
>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.basho.com/pipermail/riak-users_lists.basho.com/attachments/20140623/e4d38e45/attachment.html>


More information about the riak-users mailing list