Hi Bryan,

Thanks for the answers! A few more questions inline:

On Tue, Nov 27, 2012 at 2:16 PM, Bryan Fink <br...@basho.com> wrote:
> Hi, Alex. I'm sorry you weren't able to find your answers in our docs.
> Some of them assume that you've read all of the other docs as well.
> I'll see what I can do to clear things up inline.
>
> On Mon, Nov 26, 2012 at 7:23 PM, Alex Rønne Petersen
> <xtzgzo...@gmail.com> wrote:
>> * Is the proper way to replace the object associated with a bucket/key
>> pair to simply do a riakc_pb_socket:put/2 with the same bucket/key
>> pair (with a new object)?
>
> This one is answered in the "Modifying Data" section of the README:
>
> https://github.com/basho/riak-erlang-client/blob/master/README.md#modifying-data

I don't know how I managed to miss that. Thanks!

>
> In short, the proper way to replace an object is to first fetch the
> existing object, then update the value of what you fetched, then use
> riakc_pb_socket:put to write the new value. The reason for doing this
> is to comply with Riak's consistency system (the vector clocks) - it
> needs to know what value you were starting from in order to overwrite
> it correctly.

OK, makes sense. Just out of curiosity, though, is updating values via
put without an update a supported scenario in some way or is it
generally considered a Bad Idea (tm)?

>
>> * What exactly is the purpose of riakc_obj:update_value/2 (with
>> regards to the above question)?
>
> The riakc_obj structure stores two different things: the
> value+metadata you read, and the value+metadata you want to write. The
> update_value and update_metadata functions set the value+metadata you
> want to write. The same can be said about get_value/get_metadata and
> get_update_value/get_update_metadata - they each access one part of
> the riakc_obj structure. Although, as was discussed recently on this
> list, get_update_value will return the result of get_value if no
> update value has been set.
>
>> * How does one associate a secondary index with an object? Is this
>> done via riakc_obj:update_metadata/2?
>
> Yes, you need to set the "index" metadata entry to associate a
> secondary index with an object. For example, to set values the
> "myidx_bin" and "youridx_int" indexes:
>
>     Obj = riakc_obj:new(Bucket, Key, Value).
>     Idx = [{"myidx_bin", "hello"},{"youridx_int","9876"}].
>     MD = dict:store(<<"index">>, Idx, dict:new()).
>     ObjIndexed = riakc_obj:update_metadata(Obj, MD).
>     riakc_pb_socket:put(Socket, ObjIndexed).
>
> If overwriting a value, you would use the result of
> riakc_obj:get_metadata/1 instead of dict:new/0 for building your new
> metadata.

Does Riak figure out based on the name of the index what type it is?
That is, *_int = integer, *_bin = string?

Is there any physical limit to how many secondary indexes can be
created for an object? Or perhaps a recommended limit?

>
>> * Is there any particular reason the Erlang client doesn't yet support
>> all bucket properties?
>
> Yes, it does not support the bucket properties that the Protocol
> Buffers interface to Riak does not support. It's a known problem. You
> can follow work on it here:
>
> https://github.com/basho/riak_pb/issues/5
>
> In the meantime, the riak-erlang-http-client can be used to set other
> bucket properties:
>
> https://github.com/basho/riak-erlang-http-client
>
>> * What exactly do the various get and put options do? Specifically,
>> if_modified, notfound_ok, basic_quorum, head, and deletedvclock for
>> the former
>
> These answers can be found in the docs for the Protocol Buffers get message:
>
> http://docs.basho.com/riak/latest/references/apis/protocol-buffers/PBC-Fetch-Object/
>
>  and return_body, return_head, if_not_modified, and
>> if_none_match for the former.
>
> And these answers are in the docs for the Protocol Buffers put message:
>
> http://docs.basho.com/riak/latest/references/apis/protocol-buffers/PBC-Store-Object/

When if_none_match is enabled, will riakc_pb_socket:put/3 return ok
regardless of whether the value was stored?

>
>> * How will riakc_pb_socket:get/3 behave when queue_if_disconnected is
>> enabled? Will it fail immediately if the socket is disconnected or
>> block until it has reconnected?
>
> With queue_if_disconnected enabled, riakc_pb_socket:get/3 will block
> until the socket is reconnected.
>
> HTH,
> Bryan

Regards,
Alex

_______________________________________________
riak-users mailing list
riak-users@lists.basho.com
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com

Reply via email to