1、引言
Mnesia 是分布式数据库管理系统,尤其适合电信领域的应用,因为mnesia是软件实现的实时系统,具有高度容错的高可靠性,可以长期稳定运行。
mnesia是OTP( Open Telecom Platform )的组成部分。OTP 是建造通信应用程序的控制系统平台。
别以为mnesia只能用于开发电信系统。这刀能宰牛,岂不能杀鸡?用它做其他Erlang应用程序,可说是大材小用,你敞开造吧!
1.1 Mnesia 的设计目标:
1、实时快速的“键/值”查找;
2、非实时系统需要的、主要用于操作和维护的复杂功能;
3、分布式系统需要的数据分布;
4、高容错;
5、动态重新配置
6、复合对象存取
1.2 Mnesia 简介
1.2.1 功能
● 数据库结构可在运行时刻动态配置;
● 数据表的属性,可以声明成“本地”、“可复制”、“永久保存”等几种;
● 数据表可在节点上复制或删除,以改进容错度。系统其他部分仍可对该表读、写、删(记录);
● 程序员只需知道数据表的名称,不必关心它的具体存放处。系统会自行跟踪数据表的存放位置;
● 数据库的事务可以分布到各节点,一个事务中可以调用大批函数;
● 几个事务可以同时并行处理,完全同步。Mnesia保证同一数据不能被二个以上进程同时操作处理;
● 可以赋予事务这样的属性:它们正在系统的每个节点中执行或未执行。为了减少资源开销占用,大幅提速程序运行,可以放弃事务。这称为“不洁操作”("dirty operations")。
以下各节分别述说这些功能。
1.2.2 插入式应用程序
● QLC 和 Mnesia Session 可以与 Mnesia 结合使用,以产生专用功能,加强Mnesia的易操作性。QLC 能为Mnesia优化查询引擎,使其效率得到根本性提升。
● QLC 可以作为Mnesia的数据库编程语言。它的句法叫做“表元自选”("list comprehensions"),可用于书写复杂的数据库查询语句,对多个数据表进行集合操作。
● Mnesia Session 是Mnesia数据库管理系统的接口,使得其他非Erlang语言能够访问Mnesia。
1.2.2.1 使用 Mnesia 的理由
适合 Mnesia 的应用有以下几种类型:
● 需要复制数据的;
● 需要结构复杂的数据查询语句的;
● 需要以原子事务(atomic transactions)同时更新一些记录的;
● 需要使用软件实时系统特性的。
不适合 Mnesia 的应用有以下几种类型:
● 处理纯文本文件、二进制文件数据的;
● 所做操作,仅需“查找字典”的帮助,而这个字典可以保存在硬盘上,并且可以用标准库模块dets优化的(dets是硬盘版的ets);
● 需要硬盘日志工具,并且优化模块 disc_log 也可满足需求的;
● 运行在硬件实时系统之上的。