2012-02-24 70 views
4

我有一個包含不同表的mnesia數據庫。從不同節點訪問分佈式mnesia數據庫

我希望能夠從不同的Linux終端訪問表。

我有一個叫做add_record的函數,它需要幾個參數,比如nameid。我希望能夠在上的node1add record上撥打add_record,但我想更新來自不同位置的同一張表。

我讀了幾個消息來源,唯一發現的是我應該使用net_adm:ping(node2)。但不知何故,我無法訪問表中的數據。

回答

4

我假設你可能意思是replicated表。假設你在節點上有你的mnesia表:[email protected]-setcookie mycookie,無論它是否在另一個節點上覆制,如果我想從另一個終端訪問記錄,那麼我必須在這個其他終端中使用erlang,以及通過創建一個節點,使用該表將此節點連接到我們的節點(您確保它們都具有相同的cookie),然後調用遠程節點上的方法。

比方說你想使用方法add_record在模塊mydatabase.erl節點,其具有的Mnesia表[email protected]上,第i打開Linux終端,我輸入以下內容:

 
$ erl -name [email protected] -setcookie mycookie 
Eshell V5.8.4 (abort with ^G) 
1> N = '[email protected]'. 
'[email protected]' 
2> net_adm:ping(N). 
pong 
3> rpc:call(N,mydatabase,add_record,[RECORD]). 
{atomic,ok} 
4> 

與該模塊(rpc) ,如果兩個節點使用相同的cookie連接,則可以調用遠程節點上的任何方法。通過在遠程節點上調用此方法啓動:

 
rpc:call('[email protected]',mnesia,info,[]). 
它應該顯示遠程終端中的所有內容。我建議你可能首先通過這個講座: Distributed Erlang Programming,然後你將能夠看到如何管理複製的mnesia表。瀏覽該域的整個教程。

+2

驚人的,正是我所需要的,謝謝你。 5 * – Onty 2012-02-25 01:29:51