`
做一行爱一行吧
  • 浏览: 22462 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mnesia的操作(一)

 
阅读更多

      是一个分布式数据库管理系统,这是书上说的,如果我们第一次接触Mnesia肯定多少会感到有些抽象,因为我们往往是想存什么就直接的存了进去,很难具象化数据库的一个格式,例如我们在开发MySql数据库的时候,数据是什么样的我们可以用大脑想象的出来,几个表格类的东西很容易理解

       我们先不说Mnesia到底好在哪里,因为对于经验不多接触的数据库类型少的人来讲,单纯去讲什么数据库优缺点是很无聊的!

       开发的时候总是会给我一种错觉,就是好像我们一直在给数据库做缓存操作一样,然后等到合适的时刻再将数据持久化,和以往的java开发给我的感觉很不同,以前做java的时候层次感很清晰,但是在做erlang的时候就有一种逻辑层和持久层粘在一起的感觉!

       我们现在先在一个节点启动一个数据库来试验一下

        我们直接就从内核中启动了一个Mnesia?这说明了一个问题,就是otp是直接囊括了Mensia的,我们不妨打开erlang的数据管理器来看看,到底是不是kernel实现的Mnesia启动的!



       点击View选项,看到了Mnesia的表选项,我们创建一个简单的表看一下到底在这个管理器里可不可以看到我们的数据结构!



       这里我们生成了一个新表,test1


       我们看到了这个表test1,这个时候其实是该思考一下,内核和mnesia的关系了,从来没有再其他语言中发现这种关系,就像java中,我们都是需要桥接数据库然后才能利用一些方式才能进行数据库操作,这里我们既没有连接代码,也没有数据操作而却可以直接看到表的信息!打开节点管理器来看一下



        哦,原来在这个节点之下有两套监督树,一格是erlang的内核,另一个就是mnesia了,也就是说mnesia是独立于erlang内核的,但是相对的确实在相同的节点之内生成,他还是符合erlang的一些语言规范的例如监督进程等等!也难怪我们有时候会产生错觉,erlang和mnesia简直就是耦合在了一起!

      

        Mnesia存在了哪里我们去哪里找我们的这个test1表?我们先按照执行目录的顺序去找,因为我们并没有制定目录而且我们也并不知道默认目录的路径!



        果然,我们在执行目录内找到了,这样很不方便,我们想要让我们的数据存储在一个方便的地方便于文件的管理,那么我们可以再启动的时候加上路径!



       我们看到的是我们的路径是在文件的更上一层,这样就来看以看是否是存储在了新的文件夹里



        我们找到了这个Test的东西

        这里要讲一下的是关于创建mnesia,create_schema(Node)方法参数的问题。我们启动mnesia的时候一定要指定节点!原因就是mnesia不同与其他数据库,在操作系统中会独立存在,他需要erlang虚拟机的支持,外表上就是需要存活于一个节点之上!

      

       你可以看一下这个方法的介绍,也很好地说明了mnesia的存活创建条件等等,我们往往不会在一个系统内创建几个数据库,因为没有必要,不过这些都是因情况而定!

       在上面的方法中明确指出在本地的节点上,那么我们想通过另一个几点启动数据库可能吗,做了一个实验,使用rpc:call(N,M,F,A)方法!

      

        我们节点之间通信开启数据库



        在1111节点上我们看到了我们的数据库信息也成功开启了数据库,而这之前,我们并没有直接的在1111节点上做任何的操作!

       这些知识我们队mnesia的一个初步认识,不过有一个好的认识可以很好的帮助我们在使用mnesia时具象化我们的数据,否则一直稀里糊涂的去做,总是美中不足

      


 

 

 

 

  • 大小: 5.1 KB
  • 大小: 17.1 KB
  • 大小: 1.2 KB
  • 大小: 859 Bytes
  • 大小: 18 KB
  • 大小: 27.1 KB
  • 大小: 3.5 KB
  • 大小: 8.1 KB
  • 大小: 14.8 KB
  • 大小: 2.5 KB
  • 大小: 5.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics