読者です 読者をやめる 読者になる 読者になる

Erlang で開発されている商用分散 KVS Riak を使ってみた

riak erlang python

絶賛書きかけ

Riak とは

Riak は商用分散 KVS の一つです。Basho Technology が開発を行っておりオープンソースで公開されています。
商用版もあり、一部機能が追加されています。

Riak をインストールする(パッケージ編)

Riak をインストールする(ソースコード編)

Mac OS X 10.6.7 の Erlang R14B02 64bit で確認済み

最新版は 0.14.1 ですが、ここは git/master ブランチをチェックアウトして使ってみましょう。

チェックアウトしてビルドする

% git clone git://github.com/basho/riak.git
Cloning into riak...
remote: Counting objects: 10820, done.
remote: Compressing objects: 100% (3476/3476), done.
remote: Total 10820 (delta 7223), reused 10468 (delta 7020)
Receiving objects: 100% (10820/10820), 8.83 MiB | 1.22 MiB/s, done.
Resolving deltas: 100% (7223/7223), done.
% cd riak
% make rel

Riak の起動、いつでも落とせるようにコンソールモードで

% ./rel/riak/bin/riak console
Exec: /tmp/riak/rel/riak/erts-5.8.3/bin/erlexec -boot /tmp/riak/rel/riak/releases/0.14.0/riak             -embedded -config /tmp/riak/rel/riak/etc/app.config             -args_file /tmp/riak/rel/riak/etc/vm.args -- console
Root: /tmp/riak/rel/riak
Erlang R14B02 (erts-5.8.3) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:64] [kernel-poll:true]
(省略)
Eshell V5.8.3  (abort with ^G)
(riak@127.0.0.1)1> 

これで Riak は起動しました

Riak Erlang Client

Riak Python Client (brew 編)

Riak Python Client

% brew install protobuf
% easy_install -ZU protobuf
% easy_install -ZU riak

protobuf をインストールしておかないと protobuf が入らない可能性があります。

Python Client から使ってみる

riak-python-client で適当にバケットを作ってデータを入れてみる

% ipython -cl
Python 2.7.1 (r271:86832, Dec 11 2010, 20:55:42) 
Type "copyright", "credits" or "license" for more information.

IPython 0.10.2 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object'. ?object also works, ?? prints more.
>>> import riak
>>> 
>>> client = riak.RiakClient(port=8087, transport_class=riak.RiakPbcTransport)
>>> user_bucket = client.bucket('user')
>>> new_user = user_bucket.new('johndoe', data={
...     'first_name': 'John',
...     'last_name': 'Doe',
...     'gender': 'm',
...     'website': 'http://example.com/',
...     'is_active': True,
... })
>>> new_user.store()
<riak.riak_object.RiakObject object at 0x10167e750>
>>> user_bucket.get_keys()
['johndoe']
>>> user_bucket.get('johndoe').get_data()
{u'website': u'http://example.com/', u'gender': u'm', u'first_name': u'John', u'last_name': u'Doe', u'is_active': True}

REST API から使ってみる