Erlang mnesia 군집

3932 단어 erlangmnesia
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

좋은 웹페이지 즐겨찾기