2010-03-04 9 views
6

¿Hay alguna forma de realizar escrituras locales y lecturas globales (sin replicación de) con mnesia? Por ejemplo: el nodo A escribe en su DB local y lee el nodo B desde la base de datos del nodo A. El nodo B no tiene ningún dato propio, aparte de la información de esquema almacenada localmente.Mnesia: lectura de datos de nodo remotos en el modo {local_content, true}

De acuerdo con la documentación, {local_content, true} parece ser lo que necesito usar, pero no he tenido éxito intentando que el nodo B lea los datos del nodo A.

Mi esquema y tabla de consulta de configuración de la siguiente manera:

NODEA @ IP1:

net_adm:ping('[email protected]'). 
    rd(user, {name, nick}). 
    mnesia:create_schema([node()|nodes()]). 
    mnesia:start(). 
    mnesia:create_table(user, [ {local_content, true}, 
           {disc_copies, [node()]}, 
           {attributes,record_info(fields, user) }]). 

%% insert data and list rows on nodeA 
%% WORKS 

NODEB @ IP2:

mnesia:start(). 
    %% code to list rows from user table on nodeA 
    %% throws an ERROR saying table does not exist. 

es la configuración incorrecta o se puede hacer esto de otra manera?

+0

El acceso a la tabla local_content debe realizarse localmente. Hace que esta pregunta sea inválida – Abhijith

Respuesta

1

No creo que puedas hacerlo de la forma en que lo mencionas. Otra forma de hacerlo sería hacer una llamada rpc al nodo A y obtener los datos de esa manera. No tiene sentido usar mnesia para hacer la lectura del nodo B porque esencialmente hará un RPC de todos modos.

lo que el nodo B debería ser:

rpc:call([email protected], mnesia, read, ....). 

Hope esto es lo que un tanto [] necesidades.

EDIT: Ah y me olvidé de mencionar que no necesita el esquema en ambos nodos para que esto funcione. Esto supone que el Nodo B realmente no se preocupa por compartir ningún otro dato con el Nodo A, simplemente lo lee; En otras palabras, simplemente guarde todo el material de mnesia en el nodo A y solo haga llamadas RPC desde el nodo B.

+0

Es cierto. La documentación dice que el acceso a la tabla local_content debe hacerse localmente. Entonces creo que mi pregunta es discutible. – Abhijith

0

Es posible que deba agregar el nodo B a la configuración del esquema extra_db_nodes. No debería tener que hacer eso si se trata de una base de datos basada en disco, pero en la memoria RAM es obligatorio hacer lo que quiera.

No estoy seguro acerca de los detalles, puedo estar confundiendo dónde poner cosas. No tengo demasiada experiencia con mnesia, pero los documentos indican que deberías hacer esto.

+0

Gracias. Lo intentaré y veré qué obtengo. – Abhijith

+0

extra_db_nodes no ayuda. Gracias, sin embargo. – Abhijith

Cuestiones relacionadas