riak /

#+OPTIONS: author:nil timestamp:nil

Welcome to Riak.

* Overview
  Riak is a distributed, decentralized data storage system. 
  Below, you will find the "quick start" directions for setting up and
  using Riak.  For more information, browse the following files:
  * README:  this file
  * TODO:    a list of improvements planned for Riak
  * LICENSE: the license under which Riak is released
  * apps/    the source tree for Riak and all its dependencies
  * doc/
    - basic-setup.txt:  slightly more detail on setting up Riak
    - basic-client.txt: slightly more detail on using Riak
    - architecture.txt: details about the underlying design of Riak
    - index.html:       the root of the edoc output of 'make docs'

* Quick Start

  This section assumes that you have copy of the Riak source tree. To get started, you need to:
  1. Build Riak
  2. Start the Riak server
  3. Connect a client and store/fetch data

** Building Riak

   Assuming you have a working Erlang (R13B03 or later) installation,
   building Riak should be as simple as:

   $ cd $RIAK
   $ make all rel

** Starting Riak

   Once you have successfully built Riak, you can start the server with the following commands:

   $ cd $RIAK/rel/riak
   $ bin/riak start

   Now, verify that the server started up cleanly and is working:

   $ bin/riak-admin test

** Connecting a client to Riak

   Now that you have a functional server, let's try storing some data in it. First,
   start up a erlang node using our embedded version of erlang:

   $ erts-<vsn>/bin/erl -name riaktest -setcookie riak
   Eshell V5.7.4  (abort with ^G)

   Now construct the node name of Riak server and make sure we can talk to it:

   (> RiakNode = riak_util:str_to_node(riak).

   (> net_adm:ping(RiakNode).
   We are now ready to start the Riak client:

   (> {ok, C} = riak:client_connect(RiakNode).

   Let's create a shopping list for bread at /groceries/mine:

   (> O0 = riak_object:new(<<"groceries">>, <<"mine">>, ["bread"]).
   O0 = riak_object:new(<<"groceries">>, <<"mine">>, ["bread"]).

    (> C:put(01, 1).
    Now, read the list back from the Riak server and extract the value

    (> {ok, O1} = C:get(<<"groceries">>, <<"mine">>, 1).

     (> %% extract the value
     (> V = riak_object:get_value(O1).

     Add milk to our list of groceries and write the new value to Riak:

     (> %% add milk to the list
     (> O2 = riak_object:update_value(O1, ["milk" | V]).

     (> %% store the new list
     (> C:put(O2, 1).

     Finally, see what other keys are available in groceries bucket:

     (> C:list_keys(<<"groceries">>).