2012년 6월 15일 금요일

using riakpool_client in erlang

https://github.com/dweldon/riakpool

riakpool_client는 riak pb client에 connection pooling 기능을 넣어서 쓸 수 있게 해준다.
간단하게 쓸 수 있다. 하지만, 실전에 쓰기에는 아직 부족함이 많다.
riak http client ( https://github.com/basho/riak-erlang-http-client )을 쓰는 것이 맞을지도 모르겠다. 어떤 것을 쓰는게 빠를지 테스트 해 볼 예정이다.

riak은 key-value store다. value에 attribute들을 여러개 넣으려면,  record를 저장해야 할텐데, binary로 변환해서 저장한다. 즉, record를 꽉 채워서 넣어야 한다. 일부 field만 저장하는 것은 지원하지 않는다. 그렇게 하려면, record를 읽어와서, 바뀐 field만 다시 record에 넣고, put해야 한다. 이 부분은, 좀 아쉽다! 근데, 다른 key-value store도 내부적으로 그렇게 할 듯 하다. 확인이 필요한 부분이다. 현재까지 내가 확인 한 것은 그렇다. -.-;;
다음은 간단히 record를 put하는 예제를 구현해 봤다.

1> rd(item, {id,name} ).
item
2> It=#item{ id= <<"aaa">> , name = <<"bbb">> }.
#item{id = <<"aaa">>,name = <<"bbb">>}

3> riakpool_client:put( <<"aaa">> , <<"bbb">> , term_to_binary(It) ).
ok
4> { ok , R } =  riakpool_client:get( <<"aaa">> , <<"bbb">> ).

5> binary_to_term(R).
#item{id = <<"aaa">>,name = <<"bbb">>}
6> R2 = binary_to_term(R).
#item{id = <<"aaa">>,name = <<"bbb">>}
7> R2#item.id.
<<"aaa">>