2012-02-24 5 views
4

私は、異なるテーブルを含む記憶媒体データベースを持っています。異なるノードからの分散型記憶媒体データベースへのアクセス

異なるLinux端末からテーブルにアクセスしたいと考えています。

私は、add_recordと呼ばれる関数をいくつか持っています。例えば、nameidです。 node1add recordadd_recordnode2に電話したいと思いますが、別の場所から同じテーブルを更新したいと思います。

私はいくつかの情報源を読みましたが、唯一見つけたのはnet_adm:ping(node2)です。何とかテーブルからデータにアクセスすることはできません。

答えて

4

あなたはおそらくreplicatedテーブルを意味していたと仮定します。ノードにmnesiaテーブルがあるとします。と-setcookie mycookieが別のノードにレプリケートされているかどうかにかかわらず、別のターミナルからレコードにアクセスしたい場合、この別のターミナルでerlangを使用する必要があります。このノードを表と一緒にノードに接続します(すべてのCookieが同じであることを確認してください)。次に、リモートノードでメソッドを呼び出します。このモジュールと

 
$ 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):

は、あなたが、私はLinuxのターミナルを開いノードmnesiaテーブルを持っている[email protected]にモジュールmydatabase.erl方法add_recordを使用したいとしましょう、私は次のように入力します。 2つのノードが同じCookieを使用して接続されている場合は、リモートノード上の任意のメソッドを呼び出すことができます。リモートノードでこのメソッドを呼び出すことから始めます。

 
rpc:call('[email protected]',mnesia,info,[]). 
リモート端末のすべてを表示する必要があります。おそらく、あなたはまずこの講義を進めてください: Distributed Erlang Programmingそして、複製されたmnesiaテーブルがどのように管理されているか見ることができます。そのドメインのチュートリアル全体を参照してください。

+2

驚くべきこと、まさに私が必要としたこと、ありがとう。 5 * – Onty

関連する問題