Mnesia用户手册:一,介绍
Mnesia是一个分布式数据库管理系统DBMS,适合于需要连续运算和软实时特性的电信应用及其他Erlang应用
目录
1,介绍
2,Mnesia快速上手
3,构建一个Mnesia数据库
4,事务和其他访问上下文
5,多种Mnesia特性
6,Mnesia系统信息
7,联合Mnesia和SNMP
8,Mnesia错误消息
9,备份callback接口
10,活动访问callback接口
11,碎片表哈希callback接口
1,介绍
本手册介绍了Mnesia数据库管理系统
Mnesia是一个分布式数据库管理系统,它是OTP的一部分,OTP是构建电信应用的控制系统平台
1.1 关于Mnesia
电信系统里数据的管理和传统的商业DBMS有很多相似之处,但不全是
特别是在许多永不宕机系统里的高级别的容错、和应用程序运行在同一地址空间等需求导致我们实现一个全新的DBMS——Mnesia
Mnesia使用Erlang实现,并且和Erlang紧密连接在一起,它提供实现容错电信系统必要的功能
Mnesia是多用户分布式DBMS,特别为使用符号编程语言Erlang写就的工业级电信应用量身打造
Mnesia尝试解决典型的电信系统所以的数据管理问题,它有许多传统数据库所没有的特性
在电信应用里有许多不同于传统DBMS的需求,使用Erlang实现的应用混合了多种特效,这是传统DBMS所满足不了的
Mnesia的设计符合以下需求:
1,快速实时key/value查询
2,复杂的非实时查询,主要为运营和维护
3,分布式数据,为分布式应用
4,高容错
5,动态重配置
6,复杂对象
让Mnesia区别于大部分其他DBMS的是它是设计来解决电信应用典型的数据管理问题
Mnesia有许多传统数据库的概念,如事务和查询
Mnesia也有许多电信应用里的数据管理,如快速实时计算,配置容错级别(通过备份),不宕机的重配置等等
Mnesia和Erlang编程语言紧密结合在一起,这样它在操作数据时没有阻抗失配的问题(数据库和编程语言所操作的数据格式一样)
1.2 Mnesia数据库管理系统
特性
Mnesia包括以下特性,以产生容错、分布式数据库管理系统:
1)数据库结构可以在运行时动态重配置
2)表可以声明含有location、replication和persistence等属性
3)表可以迁移或备份到多个不同的节点来改进容错,系统其他部分仍然可以访问表来读写和删除记录
4)表的位置对程序员透明。程序让表名和系统本身来跟踪表的位置
5)数据库事务可以分布,大量的方法可以在一个事务里调用
6)不同的事务可以并行运行,它们的执行由数据库管理系统保证完全同步。Mnesia保证不会有两个进程同时操作数据
7)事务可以在系统的所有节点上执行,也可以不在任何节点上执行。事务也可以在避免“脏操作”时避开以减少开销并保证运行快速
application插件
QLC和Mnesia Session可以和Mnesia一起使用来提供一些特有的功能,以加强Mnesia的操作能力
Mnesia Session和QLC都有相应的OTP文档
下面是Mnesia Session和QLC的主要特性:
1)QLC拥有为Mnesia数据库管理系统优化查询编译器的能力,从根本上让DBMS更高效
2)QLC可以用来作为Mnesia的数据库编程语言,它包括“list comprehension”,可以用来在一些表上做复杂的数据库查询
3)Mnesia Session是Mnesia数据库管理系统的一个接口
4)Mnesia Session允许外部编程语言(即除了Erlang以外的语言)访问Mnesia DBMS
何时使用Mnesia
在以下几种应用场景使用Mnesia:
1)需要备份数据的应用
2)在数据上执行复杂的搜索的应用
3)需要使用原子事务来同步更新一些记录的应用
4)使用软实时特性的应用
另一方面,Mnesia可能不适合以下类型的应用:
1)处理纯文本或二进制文件数据的程序
2)仅仅需要可以持久化到硬盘的字典查询的应用可以使用标准库dets,它是硬盘版的ets
3)需要硬盘日志功能的应用更应该使用disc_log
4)不适合硬实时系统
作用域和目的
本手册是OTP文档的一部分,它描述了怎样构建Mnesia数据库应用,怎样集成和使用Mnesia数据库管理系统和OTP
本手册讲述了编程结构,并包含了大量编程实例来解释Mnesia的使用
前提
本手册的读者需要熟悉系统开发原则和数据库管理系统,并熟悉Erlang编程语言