日期:2014-05-16  浏览次数:20497 次

创建Mnesia数据库

最近学习erlang,在erlang中天然集成了一个分布式数据库名字叫mnesia,因为数据库天然就和erlang的元组,记录无缝结合,并且具有良好的分布式特性,能够自动地在几个erlang节点上实现数据复制,效果有点像zookeeper的节点集群,而且mnesia还支持数据库事务特性,所以mnesia在erlang应用中使用得非常频繁。

?

要在本地创建一个mnesia数据库,并且要实现插入,查询功能需要实现以下这几步:

1.启动erlang节点:

erl -mnesia dir '"d://tmp//mnesia"' -sname mynode

?以上这个d://tmp//mnesia目录是存放mnesia数据库的schema数据的,当然这个目录也可以不指定,那么mnesia数据库启动之后将把数据库的schema中的数据放在内存中,如果下次节点重启之后,之前数据库中创建的表结构数据就消失了。

2.接下来就是在erl shell中本地初始化一个空的mnesia数据库

mnesia:create_schema([node()]).

? 从参数上是一个节点列表,所以其实需要的话,可以在参数列表上设置多个erlang节点,就能在多个erlang节点上同时创建mnesia数据库了。

3.启动mnesia数据库

? 初始化完成了mnesia数据库schema之后,接下来就可以启动mneisa数据库了。

mnesia:start().

?

至此,一个空的mneisa已经创建启动成功了,我们可以调用mnesia:info(). 查看当前mnesia数据库的一些状态,结果如下:

---> Processes holding locks <---
---> Processes waiting for locks <---
---> Participant transactions <---
---> Coordinator transactions <---
---> Uncertain transactions <---
---> Active tables <---
schema         : with 1        records occupying 432      words of mem
===> System info in version "4.4.14", debug level = none <===
opt_disc. Directory "d:/tmp/mnesiaa" is NOT used.
use fallback at restart = false
running db nodes   = ['mynode@aliyun-18097n']
stopped db nodes   = []
master node tables = []
remote             = []
ram_copies         = [schema]
disc_copies        = []
disc_only_copies   = []
[{'mynode@aliyun-18097n',ram_copies}] = [schema]
2 transactions committed, 0 aborted, 0 restarted, 0 logged to disc
0 held locks, 0 in queue; 0 local transactions, 0 remote
0 transactions waits for other nodes: []
ok

?

[{'mynode@aliyun-18097n',ram_copies}] = [schema] 这行上来看当前数据库中只有一个数据库的schema表。

?

? 接下来是要在空的数据库中创建表格,并且执行CRUD的操作,请看下一篇博客:http://mozhenghua.iteye.com/admin/blogs/1885918