Domanda

Sono un Erlang e mnesia newbie ..

Come faccio ad aggiungere un nuovo nodo disc_only_copies a un database mnesia che ha già uno schema?

Grazie

È stato utile?

Soluzione

Avviare il nuovo nodo (b@node) erl -sname b -mnesia dir '"/path/to/storage"' -s mnesia. Questo avvia un nuovo nodo ram_copies chiamato b@node.

Sul nodo originale (a@node), al prompt erlang eseguire mnesia:change_config(extra_db_nodes, ['b@node']). In questo modo il nodo originale per collegare b al cluster mnesia. A questo punto, b@node si è unito al gruppo, ma ha solo una copia dello schema.

Per rendere nuovo il nodo b@node in grado di memorizzare copie del disco, abbiamo bisogno di cambiare il tipo di tabella schema sulla b@node da ram_copies a disc_copies. Eseguire mnesia:change_table_copy_type(schema, 'b@node', disc_copies). su qualsiasi nodo.

b@node ha solo una copia dello schema a questo punto. Per copiare tutte le tabelle da a@node a b@node e mantenere tipi di tabella, è possibile eseguire:

[{Tb, mnesia:add_table_copy(Tb, node(), Type)}
 || {Tb, [{'a@node', Type}]} <- [{T, mnesia:table_info(T, where_to_commit)}
                               || T <- mnesia:system_info(tables)]].

Questo comando può prendere un po 'per l'esecuzione come sarà copiare il contenuto di ogni tabella sulla rete.

b@node è ora una replica esatta di a@node. Si potrebbe modificare tale dichiarazione -. Sostituire la variabile Type con disc_only_copies nella chiamata a mnesia:add_table_copy/3 per copiare le tabelle, ma assicurano che siano su disco solo

Il mnesia documentazione spiega come utilizzare le funzioni che ho mostrato qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top