我有一個包含不同表的mnesia數據庫。從不同節點訪問分佈式mnesia數據庫
我希望能夠從不同的Linux終端訪問表。
我有一個叫做add_record
的函數,它需要幾個參數,比如name
和id
。我希望能夠在上的node1
和add record
上撥打add_record
,但我想更新來自不同位置的同一張表。
我讀了幾個消息來源,唯一發現的是我應該使用net_adm:ping
(node2)。但不知何故,我無法訪問表中的數據。
我有一個包含不同表的mnesia數據庫。從不同節點訪問分佈式mnesia數據庫
我希望能夠從不同的Linux終端訪問表。
我有一個叫做add_record
的函數,它需要幾個參數,比如name
和id
。我希望能夠在上的node1
和add record
上撥打add_record
,但我想更新來自不同位置的同一張表。
我讀了幾個消息來源,唯一發現的是我應該使用net_adm:ping
(node2)。但不知何故,我無法訪問表中的數據。
我假設你可能意思是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表。瀏覽該域的整個教程。
驚人的,正是我所需要的,謝謝你。 5 * – Onty 2012-02-25 01:29:51