forked from basho/riak
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
158 lines (124 loc) · 5.41 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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
*.sh: various startup scripts
riak_demo.escript: demo for a base level of Riak functionality
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,
and how this affects applications using it
index.html: the root of the edoc output of 'make docs'
src/
*.erl: the source for Riak (it's friendly)
config/
*.erlenv: example configuration files
Quick Start
---
This section assumes that you have copy of the Riak source tree at
$RIAK. You should have created this by cloning a repo or expanding
a tarball from somewhere.
The quick start goes like this:
1. Build Riak
2. Start the Riak server
3. Connect a client and store/fetch data
1. Build Riak
-
Assuming you have a working Erlang (R13 or later) installation,
building Riak should be as simple as:
$ cd $RIAK
$ make
2. Start the Riak server - Assuming no errors were generated in the
build step, $RIAK/config/riak-demo.erlenv and replace all instances of
$RIAK with the directory in which $RIAK is installed. For example,
change:
{riak_heart_command, "(cd $RIAK; ./start-restart.sh $RIAK/config/riak-demo.erlenv)"}.
to:
{riak_heart_command, "(cd /usr/local/riak; ./start-restart.sh /usr/local/riak/config/riak-demo.erlenv)"}.
Then start riak:
$ cd $RIAK
$ ./start-fresh.sh config/riak-demo.erlenv
The server should start, then background itself, leaving you at a
command prompt.
At this point, you can use riak_demo.escript to ensure that Riak is
functioning:
$ ./riak_demo.escript config/riak-demo.erlenv
Attempting to connect to 127.0.0.1:9000 with cookie riak_demo_cookie...
Connected successfully
Looking for pre-existing object at {riak_demo, "demo"}...
No pre-existing object found, creating new
Storing object with new value...
Written successfully
Fetching object at {riak_demo, "demo"}...
Fetched successfully
Object contained correct value
SUCCESS
If riak_demo prints no "Error: ..." messages, and instead prints
"SUCCESS", then Riak is working.
3. Connect a client
-
Assuming no errors were generated during the server start step, a
simple client interaction will look like:
$ erl -name riaktest@127.0.0.1 -pa $RIAK/ebin
(riaktest@127.0.0.1)1> %% connect to Riak
(riaktest@127.0.0.1)1> {ok, C} = riak:client_connect("127.0.0.1", 9000, riak_demo_cookie).
{ok,{riak_client,'riakdemo@127.0.0.1',
"20090722191020-riaktest@127.0.0.1-riakdemo@127.0.0.1-266664"}}
riaktest@127.0.0.1)2> %% Create a shopping list for bread at /groceries/mine
riaktest@127.0.0.1)2> O0 = riak_object:new(<<"groceries">>, <<"mine">>, ["bread"]).
{r_object,<<"groceries">>,<<"mine">>,
[{r_content,{dict,0,16,16,8,80,48,
{[],[],[],[],[],[],[],[],[],[],[],[],[],[],...},
{{[],[],[],[],[],[],[],[],[],[],[],[],...}}},
["bread"]}],
[],
{dict,0,16,16,8,80,48,
{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],...},
{{[],[],[],[],[],[],[],[],[],[],[],[],[],...}}},
undefined}
(riaktest@127.0.0.1)3> %% store the list
(riaktest@127.0.0.1)3> C:put(O0, 1).
ok
(riaktest@127.0.0.1)4> %% retrieve the list
(riaktest@127.0.0.1)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"]}],
[{"20090722191020-riaktest@127.0.0.1-riakdemo@127.0.0.1-266664",
{1,63415509105}}],
{dict,0,16,16,8,80,48,
{[],[],[],[],[],[],[],[],[],[],[],[],[],...},
{{[],[],[],[],[],[],[],[],[],[],[],...}}},
undefined}}
(riaktest@127.0.0.1)5> %% extract the value
(riaktest@127.0.0.1)5> V = riak_object:get_value(O1).
["bread"]
(riaktest@127.0.0.1)6> %% add milk to the list
(riaktest@127.0.0.1)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"]}],
[{"20090722191020-riaktest@127.0.0.1-riakdemo@127.0.0.1-266664",
{1,63415509105}}],
{dict,0,16,16,8,80,48,
{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],...},
{{[],[],[],[],[],[],[],[],[],[],[],[],[],...}}},
["milk","bread"]}
(riaktest@127.0.0.1)7> %% store the new list
(riaktest@127.0.0.1)7> C:put(O2, 1).
ok
(riaktest@127.0.0.1)8> %% find out what else is in the groceries bucket
(riaktest@127.0.0.1)8> C:list_keys(<<"groceries">>).
{ok,[<<"mine">>]}