RiakCSは大量なデータを保存する手段の一つで、プライベートストレージに使うのはいい選択でもあります。
RiakCSを動かすにはRiak, Stanchion, RiakCSが必要です。
RiakCSのインストールに関してはここに記述されています。
RiakCSはErlangに書かれているため、起動されると、ErlangのRuntime Systemが動きます。
RiakCSにアタッチするとRiakCSが提供している全てのPublic APIが使えるようになります。
いくつかのAPIを試してみたいと思います。まずRiakCSにアタッチします。
# sudo su
# riak-cs attach
まずユーザー作成します。
1> {ok, User} = riak_cs_user:create_user("fake-name", "fake-name@example.com").
{ok,{rcs_user_v2,"fake-name","fake-name",
"fake-name@example.com","LIF-FUEJDLPZWENSZEGH",
"MaWqrVs04OEVUPn9oGbu4ov-BSsh01v12LWUiw==",
"3fcf010cfbc6baa2c8dae4857b4399498f015f373cb3ca46ac1bb15ef69e2b44",
[],enabled}}
2> User.
{rcs_user_v2,"fake-name","fake-name",
"fake-name@example.com","LIF-FUEJDLPZWENSZEGH",
"MaWqrVs04OEVUPn9oGbu4ov-BSsh01v12LWUiw==",
"3fcf010cfbc6baa2c8dae4857b4399498f015f373cb3ca46ac1bb15ef69e2b44",
[],enabled}
上に作成されているUser
はいろんなところで使うことができます。
このユーザーは管理者であるかどうかをチェックします。
3> riak_cs_user:is_admin(User).
false
false
なので、一般ユーザーになっています。
すべてのユーザーののキーをリストアップしてみます。
4> {ok, RcPid} = riak_cs_riak_client:checkout().
{ok,<0.571.0>}
5> riak_cs_user:fetch_user_keys(RcPid).
{ok,[<<"0HXABCDEFJ-BR4LQ9SCF">>,<<"2UEQRP_ABCDEFRKOEKOY">>,
<<"COW-7ABCDEFAWY4H3-PN">>,<<"CZOCABCDEFWA_STA_UWK">>,
<<"LIF-FUEJDLPABCDEFEGH">>,<<"WU2OZPPF-ABCDEFXRX7A">>]}
RiakCS中の特定のユーザーの情報を取得してみます。
6> riak_cs_user:get_user("LIF-FUEJDLPZWENSZEGH", RcPid).
{ok,{{rcs_user_v2,"fake-name","fake-name",
"fake-name@example.com","LIF-FUEJDLPZWENSZEGH",
"MaWqrVs04OEVUPn9oGbu4ov-BSsh01v12LWUiw==",
"3fcf010cfbc6baa2c8dae4857b4399498f015f373cb3ca46ac1bb15ef69e2b44",
[],enabled},
{riakc_obj,<<"moss.users">>,<<"LIF-FUEJDLPZWENSZEGH">>,
<<107,206,97,96,96,96,204,96,202,5,82,60,202,156,255,126,
206,176,251,162,194,...>>,
[{{dict,3,16,16,8,80,48,
{[],[],[],[],[],[],[],[],[],[],...},
{{[],[],[],[],[],[],[],[],...}}},
<<131,104,9,100,0,11,114,99,115,95,117,115,101,114,95,
118,50,...>>}],
undefined,undefined}}}
バケットのアクセス権限を取得してみます。
riak_cs_acl:fetch_bucket_acl(<<"test9">>, RcPid).
{ok,{acl_v2,{"madfrogme001",
"98e7c6cfe1a1bcbc85c2befdbfb43fe0b8339379d5cc0f2160fabc055039440a",
"CZOC9SNTQRWA_STA_UWK"},
[{{"madfrogme001",
"98e7c6cfe1a1bcbc85c2befdbfb43fe0b8339379d5cc0f2160fabc055039440a"},
['FULL_CONTROL']}],
{1445,953267,673635}}}
実際これらのAPIを使うにはソースコードの参照が必要で、
https://github.com/basho/riak_cs/tree/develop/src
実際にRiakCSがRiakと通信する時にriak-erlang-clientを大いに頼っています。
https://github.com/basho/riak-erlang-client/blob/master/src/riakc_pb_socket.erl