mnesia是erlang自带的分布式数据库,基于ets和dets实现的。mnesia兼顾了dets的持久性和ets的高性能,可以自动在多个erlang节点间同步数据库。最关键的是,mnesia实现了事务机制。
mnesia数据库有一个schema表,保存着数据库相关的一些信息,例如如何将表保存到磁盘、如何加载这些表、在哪些节点间同步数据。构建集群,关键是处理这个schema表。
调用函数mnesia:create_schema(ListOfNodes)可以创建schema,这必须在启动mnesia之前调用。缺省情况下,schema会保存在节点启动的当前目录,可以在应用启动时修改这个参数erl -name SomeName -mnesia dir where/to/store/table,或者执行函数application:set_env(mnesia, dir, "where/to/store/table").
初始化时构建mnesia集群
必须保证每一个Node都没有schema,如果有,调用mnesia:delete_schema删除。
在本地启动两个erlang 节点:
erl -name a@127.0.0.1 -mnesia dir '"path1"' -s mnesia
erl -name b@127.0.0.1 -mnesia dir '"path2"' -s mnesia
mnesia启动后会创建schema的,所以需要先删除schema,再重新创建。
(a@127.0.0.1)1> mnesia:system_info().
===> System info