创建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表。