Access to CAS Riak with Erlang
-
Upload
kirill-krinkin -
Category
Technology
-
view
472 -
download
5
description
Transcript of Access to CAS Riak with Erlang
Организация доступа к CAS Riak на языке Erlang
Докладчики:П.К. Губин
М.Г. Баженов
Содержание
• Что такое Riak?• Структура Riak.• Организация хранения и доступа к файлам
в Riak.• Теорема CAP• Riak API, Erlang Clients
Что такое Riak?• Riak — это документно-ориентированная база данных. • Riak — это децентрализованное key-value хранилище данных, с
поддержкой стандартных операций — get, put и delete. • Riak — это распределенное, масштабируемое, отказоустойчивое
решение для хранения информации. • А так же Riak — это система с открытым исходным кодом и
поддержкой обращений с помощью HTTP, JSON и REST. • Ну и конечно Riak — это NoSQL.
Структура Riak.
Организация хранения и доступа к файлам в Riak.
Введем 3 термина:
• N — это количество реплик каждого значения в хранилище.
• R — количество данных реплик для выполнения операции чтения.
• W — количество реплик необходимых для выполнения операции записи.
Теорема CAP
Теорема CAP (теорема Брюера) - утверждение о том, что в любой реализации распределённых вычислений возможно обеспечить не более двух из трёх следующих свойств:
• согласованность данных (англ. Consistency)
• доступность (англ. availability)
• устойчивость к разделению (англ. partition tolerance)
Riak API, Erlang Clients
Riak имеет два API: • HTTP API • PBC API
Для доступа по этим протоколам существуют клиенты на языке Erlang, соответственно:• riak-erlang-http-client• riak-erlang-client
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">>}}
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“>>}}
Подведем итог
Как мы убедились, Riak можно использовать для разработки высоконадежных, распределенных систем, идеален для создания облачных хранилищ и сервисов.