Erlang mnesia 군집
첫 번 째 단계:online.hrl 만 들 기
-record(chat, {user_name,
pid
}
).
두 번 째 단계:데이터베이스 초기 화 파일 만 들 기,onlineinit.erl,chat 표를 ram 모드 로 만 들 고 type 은 bag 입 니 다.
-module(online_init).
-include("online.hrl").
-export([init/0]).
init() ->
mnesia:create_table(chat,
[{ram_copies, [aa@localhost, bb@localhost]},
{type, bag},
{attributes, record_info(fields, chat)}]).
STEP 3:테스트 코드 생 성,onlineutil.erl
add(Who, Pid) ->
F = fun() ->
New = #chat{user_name = Who, pid = Pid},
mnesia:write(New)
end,
mnesia:transaction(F).
remove(Who, Pid) ->
Oid = {chat, Who, Pid},
F = fun() ->
%% mnesia:delete
%% mnesia:delete(Oid)
%% bag mnesia:delete_object
mnesia:delete_object(Oid)
end,
mnesia:transaction(F).
find(Who, Pid) ->
F = fun() ->
io:format("find result, ~p~n", [mnesia:read({chat, Who})])
end,
mnesia:transaction(F).
select(Who) ->
F = fun() ->
Chat = #chat{user_name = Who, pid = '$1', _ = '_'},
io:format("find result, ~p~n", [mnesia:select(chat, [{Chat, [], ['$1']}])])
end,
mnesia:transaction(F).
시동 을 걸다
두 개의 console 창 을 시작 하여 각각 입력 합 니 다.
1)
erl -sname aa -mnesia dir '"/test_mnesia/disc/online"'
복귀
erl -sname bb -mnesia dir '"/test_mnesia/db/online"'
복귀
2)mnesia 를 처음 시작 할 때 aa 또는 bb 점 에 mnesia:create 를 입력 하 십시오.schema([aa@localhost,bb@localhost]).
복귀
주의:
1)schema 는 한 번 만 만 들 수 있 습 니 다.
2)실제 노드 마다 schema 복사 본 을 저장 합 니 다.
3)aa 와 bb 두 점 에 각각 입력
mnesia:start().
복귀
4)테이블 을 초기 화하 고 aa 또는 bb 점 에 입력
online_init:init().
{atomic,ok}을 되 돌려 줍 니 다.
5)표 정 보 를 보고 aa 와 bb 점 에 각각 입력
mnesia:info().
되돌아오다
---> Processes holding locks <---
---> Processes waiting for locks <---
---> Participant transactions <---
---> Coordinator transactions <---
---> Uncertain transactions <---
---> Active tables <---
chat : with 0 records occupying 300 words of mem
...
...
...
설명 표 생 성 성공.
검증 하 다.
검증
1)aa 점 에 online 입력util:add("bob", "im").
{atomic,ok}을 되 돌려 줍 니 다.
2)bb 점 에 online 입력util:find("bob", "im").
되돌아오다
find result, [{chat,"bob","im"}]
{atomic,ok}
3)bb 점 에 online 입력util:add("bob", "hello").
{atomic,ok}을 되 돌려 줍 니 다.
4)aa 점 에 online 입력util:find("bob", "im").
되돌아오다
find result, [{chat,"bob","im"},{chat,"bob","hello"}]
{atomic,ok}
5)aa 점 에 online 입력util:remove("bob", "im").
되돌아오다
{atomic,ok}
6)bb 점 에 online 입력util:select("bob").
되돌아오다
find result, ["im"]
{atomic,ok}
검증,지연 처리
1)aa 점 에 halt()를 입력 하 십시오.aa 점 을 지 웁 니 다.
2)bb 점 입력 onlineutil:select("bob").
되돌아오다
find result, ["im"]
{atomic,ok}
mnesia 데이터베이스 가 여전히 존재 한 다 는 것 을 설명 합 니 다.
3)aa 점 시작,erl-snaa-mnesia dir'/test 입력mnesia/disc/online"'
복귀
mnesia:start()를 입력 하 십시오.
복귀
입력 onlineutil:select("bob").
되돌아오다
find result, ["im"]
{atomic,ok}
설명,mnesia 데이터베이스,bb 점 에서 aa 점 으로 동기 화 되 며,데 이 터 는 여전히 존재 합 니 다.
참고 문헌
[1] http://hideto.iteye.com/blog/232881
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Instalando o Elixir e o Erlang com o gerenciador de versões asdfEsse tutorial usa o gerenciador de versões asdf, mas fique a vontade para utilizar outros se preferir. Infelizmente o as...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.