Access to CAS Riak with Erlang

14
Организация доступа к CAS Riak на языке Erlang Докладчики: П.К. Губин М.Г. Баженов

description

 

Transcript of Access to CAS Riak with Erlang

Page 1: Access to CAS Riak with Erlang

Организация доступа к CAS Riak на языке Erlang

Докладчики:П.К. Губин

М.Г. Баженов

Page 2: Access to CAS Riak with Erlang

Содержание

• Что такое Riak?• Структура Riak.• Организация хранения и доступа к файлам

в Riak.• Теорема CAP• Riak API, Erlang Clients

Page 3: Access to CAS Riak with Erlang

Что такое Riak?• Riak — это документно-ориентированная база данных. • Riak — это децентрализованное key-value хранилище данных, с

поддержкой стандартных операций — get, put и delete. • Riak — это распределенное, масштабируемое, отказоустойчивое

решение для хранения информации. • А так же Riak — это система с открытым исходным кодом и

поддержкой обращений с помощью HTTP, JSON и REST. • Ну и конечно Riak — это NoSQL.

Page 4: Access to CAS Riak with Erlang

Структура Riak.

Page 5: Access to CAS Riak with Erlang

Организация хранения и доступа к файлам в Riak.

Введем 3 термина:

• N — это количество реплик каждого значения в хранилище.

• R — количество данных реплик для выполнения операции чтения.

• W — количество реплик необходимых для выполнения операции записи.

Page 6: Access to CAS Riak with Erlang
Page 7: Access to CAS Riak with Erlang
Page 8: Access to CAS Riak with Erlang
Page 9: Access to CAS Riak with Erlang
Page 10: Access to CAS Riak with Erlang

Теорема CAP

Теорема CAP (теорема Брюера) - утверждение о том, что в любой реализации распределённых вычислений возможно обеспечить не более двух из трёх следующих свойств:

• согласованность данных (англ. Consistency)

• доступность (англ. availability)

• устойчивость к разделению (англ. partition tolerance)

Page 11: Access to CAS Riak with Erlang

Riak API, Erlang Clients

Riak имеет два API: • HTTP API • PBC API

Для доступа по этим протоколам существуют клиенты на языке Erlang, соответственно:• riak-erlang-http-client• riak-erlang-client

Page 12: Access to CAS Riak with Erlang

Riak API, Erlang Client %% create connectionIP = "127.0.0.1“, Port = 8098, Prefix = "riak“, Options = [],C = rhc:create(IP, Port, Prefix, Options).

{rhc,"10.0.0.42",80,"riak“,[{client_id,"ACoc4A=="}]}

%% store objectBucket = <<"bar">>, Key = <<"foo">>, Data = <<"hello world">>,ContentType = <<"text/plain">>, Object0 = riakc_obj:new(Bucket, Key, Data, ContentType),rhc:put(C, Object0).

Ok%% retrieve objectBucket = <<"bar">>, Key = <<"foo">>,{ok, Object1} = rhc:get(C, Bucket, Key).

{ok,{riakc_obj,<<"bar">>,<<"foo">>, <<"hello world">>}}

Page 13: Access to CAS Riak with Erlang

Riak API, Erlang Client %% create connection{ok, Pid} = riakc_pb_socket:start_link("127.0.0.1", 8087).{ok,<0.56.0>}

%% create objectObject = riakc_obj:new(<<"groceries">>, <<"mine">>, <<"eggs & bacon">>).{riakc_obj,<<"groceries">>,<<"mine">>, <<"eggs & bacon">>}

%% store objectriakc_pb_socket:put(Pid, Object).Ok

%% retrieve object{ok, Object 1} = riakc_pb_socket:get(Pid, <<"groceries">>, <<"mine">>).{ok,{riakc_obj,<<"groceries">>,<<"mine">>, <<"eggs & bacon“>>}}

Page 14: Access to CAS Riak with Erlang

Подведем итог

Как мы убедились, Riak можно использовать для разработки высоконадежных, распределенных систем, идеален для создания облачных хранилищ и сервисов.