Good News — Mnesia Unlimited!

转载:http://erlang-china.org/news/mnesia_unlimited.html


我们知道 mnesia 为很多人诟病的一个问题是——它有着诸多让人费解的限制。比如说,在 32 位的系统上,你最多只能存储 4G 的数据。又比如传说中磁盘表让人胆战心惊的修复过程。这些缺陷常常让人在试图推广 erlang 时,总觉得有些底气不足。虽然说,在实用的角度, 4G 其实也够用了,况且还可以分块。但无论怎么说,这种限制毕竟让人不爽。但其实,这些让人尴尬的限制其实并不是 mnesia 代码的问题(冤枉 mnesia 同学了),而是由它底层的存储机制 ets 和 dets 的特性所决定的(好比 mysql 之于 myisam / innodb 的关系)。现在好了,我们可以说,这些让人不快的限制已经可以被抛在脑后了。

Joel Reymont 就是那位在 05 年写出惊到大家的《Writing Low-Pain Massively Scalable Multiplayer Servers》一文的作者。(此文本站亦有中文翻译《轻松实现可伸缩性,容错性,和负载平衡的大规模多人在线系统》,感谢译者“神宗冥浩”)。他这次带给大家的是一个让人惊叹的大礼包——超乎想象的 mnesia 补丁包mnesiaex 。这个东西解除了加在 mnesia 数据库系统上所有的限制(虽说上面已经提到,实际上 mnesia 代码本身没有什么真正的限制)——你现在可以用 SleepyCat/BerkeleyDB/MySQL/Amazon S3/Tokyo Cabinet/… 甚至是你自己喜欢的某种东西来当作 mnesia 的后端,就像 ets/dets 一样。而访问的接口仍保持不变——继续沿用 mnesia 的接口,一行也不用改。 DIY 这种扩展也变得相当容易,写一个 behavior 就成了。

感谢 Joel Reymont 将这些工作回馈到开源社区。让我们一起祈祷 OTP Team 将这堆 patch 合并到 Erlang 的下一个发布版本中去吧。

顺便 blah 一下:

关于 Erlang

Erlang 就好像是 Ericsson 的私生子,从出生之日起就一直不得宠。在 AXD301 中的耀眼光芒,还是逃脱不了被弃用的命运(Ericsson 又转回去用 C 写交换机了,别让我猜中是因为公司政治)。失败了的 Joe 一伙人被迫离开自组 BlueTail 公司,绝望之中以 Open Source 协议公布了 Erlang 的代码,这个挫折使得它在编程语言的坟场寂寞的躺了多年,但仍然保留着翻盘的火种。默默无闻的完善了多年(加入SMP支持之类),一直不为人所知。直到碰上 CPU 多核变革的机遇,这才重新捡回半条命,并渐渐被人提起。但别忘了,Erlang 直到现在仍然都是由 Ericsson 所拥有(整个的 OTP Team 都是他的员工)和操纵的(你能看到 Erlang 的 souce code 但能访问 Erlang source code 的 SVN 么?)。而比 Sun 的 Java 更加糟糕的是老态龙钟的 Ericsson 从来也没有意识到 Erlang 这个私生子身上所蕴含的潜力。麻烦哪位消息人士请一定转告 Ericsson 的老爷爷们,现在连 Sun 都已经完全开源了 Java ,请抓紧赶上吧,把那些没用的遮遮掩掩全都扔掉。因为对于一个程序设计语言而言,只有 Open Source Community 的程序员们,只有这些人,才是它生命力的真正源泉。在此祈祷 Open Source Erlang 项目朝着更 Open Source Way 的方向前进。

关于 Mnesia

因为工作关系,最近又有机会再来近距离审视 mnesia 这坨神奇的东西。Joe 老头在他的书中说:“关于 Mnesia 的更多内容,恐怕还要再写一本书才能讲得清楚”,现在我(部分地)知道这句话的分量了——我发现自己之前对于 Mnesia 的认识完全错了,而基于新的认识,好多东西都要推翻了重来(害我多做了那么多蹩脚的实现,写了那么多苍白的代码)。我的感觉(现在的)是—— mnesia 根本就不是什么数据库,这只是一个善意的谎言(以它出现的时代来说,太激进,会把人都吓跑了)。实际上,它根本就是一个 Erlang 的 hibernate 。换句话说,这个东西就不应该被拿来当作“数据库”用,而是应该拿来当作“数据层”用。一字之差,谬以千里,熟悉 Java/SSH 编程的同学们相信都能明白我在说什么。实际上,我私下里在怀疑这是 mnesia 最初的设计目的之一,但为了某种原因而故意不去点破这一层。但愿在这个问题上我只是个可耻的阴谋论者。


你可能感兴趣的:(编程,数据库,Hibernate,erlang,sun,behavior)