blog.programfan.info
新网站即将启用

[原]最近一段时间对erlang,mnesia的学习总结

  前段时间研究了下mnesia,一直想总结分享一下,给erlang社会贡献一点自己的力量,因各种原因没有开始,今天开始慢慢总结,什么时候总结完总结完就知道了~~hoho~~,下面正式开始:

  正式接触mnesia是进入新公司之后才真正开始的,这时候mnesia数据表已经基本都建立完毕,我的主要任务是维护这个系统,所以要首先了解它的构造,然后把想要的数据取出来,必要的时候往里面插入或删除一些数据,也增加或删除了一些表,但主要的工作还是查询数据库,在说之前要把我的工作环境简单介绍一下:

  服务器环境:ubuntu10.04,  erlang 12B?(5.6.5), 

  本机环境:ubuntu10.04,  erlang13B03(5.7.4)

  一、环境说完之后,说一下我的任务,开始的时候我一般都是把代码编译完成后,发布到服务器,然后进入服务器的结点,执行查询的函数来得到对应的数据,但这也带来了一些不便,那就是我需要查询各种数据,查询什么样的数据我也不知道,只能是不断的试,所以要不断的修改,这就必须每次都要把程序更新到服务器,太过麻烦,于是我就想在本地结点来调用服务器上数据库中的数据,但出现了很多莫名其秒的错误,如:

... ...(有时间一点点加上)

遇到很多次,浪费了很多时间之后才知道关键要用c:nl(Module)来把本结点代码同步到服务器结点(当然还有其他错误是用别的方法来解决),然后执行才生效(说实话,到现在我还没仔细研究清楚,只是知其然而矣!)

  二、据说往mnesia数据库里面存放数据时数据二进制数效率最高,所以我们这儿除了时间和原子类型都存放成了数据库格式,这样我们想查看数据表里面内容的时候用tv:start()调用出来的界面没法看到里面的数据,只好打印出来看,但如果打印到终端的话, 数据量稍大一些就显示不全,这样就有两种方法来解决:一种是把数据打印到文件中,另一种是用页面显示。开始的时候我是用最简单的方法来把得到的数据打印到文件,但我感觉太过麻烦,因为每次只能把一个表在某个条件下的数据打印到文件中每次都要重写,当时查询任务又相对比较多,于是我就想实现一个通用的方法。

  我想的最完美的方案是实现一界面来控制mnesia里面的内容,想实现类似mysql front之类的功能,用类似sql语句的方法来得到对应的数据,后来感觉太过巨大;于是退而求其次,弄一个页面在上面可以增加查询条件,然后得到对应的数据分布显示,以后还打算增加排序功能之类的,为此我还研究了mochiweb和nitrogen,后来时间赶的紧而这个方案也不是一时半会能弄完的,而我要尽快完成手里面的活,然后接手js部分的程序;于是再退而求其次,把求出的数据打印到文件中,于是我写了一个专门的程序来把查询到的数据打印到文件中,但这时遇到另一个问题,就是直接把数据打印到文件的话,如果数据没有中文的话,问题不是很大,但如果有中文,它就会打印出这些中文的UTF-8码,而不是对应的汉字,只有用"~s"来打印汉字对应的字符串时才会打印汉字,用“~p”不打印汉字。但问题又来了,你不知道这些表的字段个数,而且你也不知道哪个字段是字符串哪些不是,郁闷了N天后最后用一个笨方法解决(太笨了不好意思说),现在想想当时主要是任务重,事多 没仔细想,其实一定有简便方法,现在也懒的想了,有知道的朋友给我说下哈,这个有时间再想吧。

  三、别的暂时还没想好,以后有空再想,今天有点晚了,休息先

posted @ 2010-11-17 00:10  Gordon Chao  Views(846)  Comments(0Edit  收藏  举报
www.programfan.info
新网站即将启用