Welcome to Riak.
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’
This section assumes that you have copy of the Riak source tree. To get started, you need to:
- Build Riak
- Start the Riak server
- Connect a client and store/fetch data
Assuming you have a working Erlang (R13B03 or later) installation, building Riak should be as simple as:
$ cd $RIAK $ make all rel
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
Note that the $RIAK/rel/riak directory is a complete, self-contained instance of Riak and Erlang. It is strongly suggested that you move this directory outside the source tree if you plan to run a production instance.
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) ([email protected])1>
Now construct the node name of Riak server and make sure we can talk to it:
([email protected])4> RiakNode = riak_util:str_to_node(riak).
([email protected])2> net_adm:ping(RiakNode). pong ([email protected])2>
We are now ready to start the Riak client:
([email protected])2> {ok, C} = riak:client_connect(RiakNode). {ok,{riak_client,’[email protected]’,<<4,136,81,151>>}}
Let’s create a shopping list for bread at /groceries/mine:
([email protected])6> O0 = riak_object:new(<<”groceries”>>, <<”mine”>>, [“bread”]). O0 = riak_object:new(<<”groceries”>>, <<”mine”>>, [“bread”]). {r_object,<<”groceries”>>,<<”mine”>>, [{r_content,{dict,0,16,16,8,80,48, {[],[],[],[],[],[],[],[],[],[],[],[],[],[],…}, {{[],[],[],[],[],[],[],[],[],[],[],[],…}}}, [“bread”]}], [], {dict,1,16,16,8,80,48, {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],…}, {{[],[],[],[],[],[],[],[],[],[],[],[],[],…}}}, undefined}
([email protected])3> C:put(01, 1).
Now, read the list back from the Riak server and extract the value
([email protected])4> {ok, O1} = C:get(<<”groceries”>>, <<”mine”>>, 1). {ok,{r_object,<<”groceries”>>,<<”mine”>>, [{r_content,{dict,2,16,16,8,80,48, {[],[],[],[],[],[],[],[],[],[],[],[],…}, {{[],[],[],[],[],[], “X-Riak-Last-Modified”,87|…, [],[],[],…}}}, [“bread”]}], [{“[email protected]@example.com-266664”, {1,63415509105}}], {dict,0,16,16,8,80,48, {[],[],[],[],[],[],[],[],[],[],[],[],[],…}, {{[],[],[],[],[],[],[],[],[],[],[],…}}}, undefined}}
([email protected])5> %% extract the value ([email protected])5> V = riak_object:get_value(O1). [“bread”]
Add milk to our list of groceries and write the new value to Riak:
([email protected])6> %% add milk to the list ([email protected])6> O2 = riak_object:update_value(O1, [“milk” | V]). {r_object,<<”groceries”>>,<<”mine”>>, [{r_content,{dict,2,16,16,8,80,48, {[],[],[],[],[],[],[],[],[],[],[],[],[],[],…}, {{[],[],[],[],[],[], “X-Riak-Last-Modified”,87,101,100|…, [],[],[],[],[],…}}}, [“bread”]}], [{“[email protected]@example.com-266664”, {1,63415509105}}], {dict,0,16,16,8,80,48, {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],…}, {{[],[],[],[],[],[],[],[],[],[],[],[],[],…}}}, [“milk”,”bread”]}
([email protected])7> %% store the new list ([email protected])7> C:put(O2, 1). ok
Finally, see what other keys are available in groceries bucket:
([email protected])8> C:list_keys(<<”groceries”>>). {ok,[<<”mine”>>]}
Configuration for the Riak server is stored in $RIAK/rel/riak/etc directory. There are two files:
- vm.args This file contains the arguments that are passed to the Erlang VM in which Riak runs. The default settings in this file shouldn’t need to be changed for most environments.
- app.config This file contains the configuration for the Erlang applications that run on the Riak server.
This script is the primary interface for starting and stopping the Riak server.
To start a daemonized (background) instance of Riak:
$ bin/riak start
Once a server is running in the background you can attach to the Erlang console via:
$ bin/riak attach
Alternatively, if you want to run a foreground instance of Riak, start it with:
$ bin/riak console
Stopping a foreground or background instance of Riak can be done from a shell prompt via:
$ bin/riak stop
Or if you are attached/on the Erlang console:
([email protected])1> q().
You can determine if the server is running by:
$ bin/riak ping
This script provides access to general administration of the Riak server.
To join a new Riak node to an existing cluster:
$ bin/riak start # If a local server is not already running $ bin/riak-admin join <node in cluster>
(Note that you must have a local node already running for this to work)
To verify that the local Riak node is able to read/write data:
$ bin/riak-admin test