Mnesia

维基百科,自由的百科全书
跳转至: 导航搜索
Mnesia
原作者 喬·阿姆斯特朗, 罗伯.威廉, 丹.古德门德松以及其他人
開發者 爱立信
穩定版本
穩定版本
4.15 / 2017年7月5日 (2017-07-05)
编程语言 Erlang
操作系统 跨平台
系統平台 跨平台
类型 关系型 数据库管理系统
许可协议 Erlang开源许可证
網站 www.erlang.org/doc/man/mnesia.html
LYME (software bundle) 基于 Erlang 且包含 Mnesia. 它们都是自由及开放源代码软件

Mnesia,是使用Erlang程式語言编写的分布式软实时数据库管理系统。它也是作为开放电信平台的一部分发布的。[1]

描述[编辑]

Mnesia 与 Erlang 都是爱立信公司为与电信相关的软实时分布式高可用的计算工作开发的。它既不是为了通用办公型数据处理设计的数据库管理系统。也无意于替代基于 SQL 语言的系统。它是为了支持Erlang实现数据管理系统类的数据持久化而存在的。[2]比起带有SQL的数据库服务器,它与像 Berkeley DB 这样的嵌入式数据库管理系统具备更多的共同之处。

数据库模型[编辑]

表中的“行”代表了包含一个键值以及一个数据域的记录。这条数据域可能是一个包含任意复杂性 Erlang 数据结构的元组

关系型特性[编辑]

数据库模型是关系型的,但它并不是某些非常熟悉SQL的人所期待的那样。一个数据库包含多个表。它们之间的关系建模于其他表。[3]

Mnesia 高可用方法的一个关键特性就在于表可以在数据库里重新配置并且可以在结点之间互相迁移。这样的操作不仅可以在数据库运行的时候进行,甚至还可以在数据库进行写操作的时候进行。

编码[编辑]

Mnesia 的查询语言不是 SQL 语言,而是 Erlang 本身。[4]这也意味着它可以让开发者直接使用 erlang 语言的特性来表达事务,开发者可以仅仅使用一种语言开发一个应用程序。

事务[编辑]

Erlang 是函数编程语言。Mnesia 正是基于这一点来做到 ACID 事务的。作为事务运行的函数块仅仅只是一个非常普通的被称为函数对象的 Erlang 构造体。[5]写成单条 Mnesia 语句为 mnesia:transaction(F)。 这样一来就可以使源代码变得要比SQL的 BEGIN / COMMIT 配对的语法更清晰,同时也避免了在过程中没有关闭事务的问题。

又因为 Erlang 的函数式特性,嵌套事务也非常简单。也可以在多个结点(也就是单独的服务器)里发布事务。以这种方式使用事务可以让语义保持一致,同时也让编写库代码在上下文保持一致的效果。

Mnesia 的一般编码风格是总是使用事务。考虑到性能问题,Mnesia 也支持刻意使用“脏操作”来避免使用事务。这些操作虽然是对 ACID 原子性以及隔离性的妥协,但也提供了大概10倍的吞吐量。[6]除此以外,它还提供了将数据存储在内存中的选项,然而这么做会丢失 ACID 的持久性。

有效执行[编辑]

Mnesia 是 LYME web 应用程序栈的一部分。这与 LAMP 类似,但它是基于 Erlang。用 Erlang实现会带来一个效率上的好处,那就是开发出来的应用程序自始至终是运行在单个虚拟机上的。LYME 充分利用了这一点,因为连 Yawsweb 服务器都是由 Erlang 实现的。

地址空间在数据与代码之间都是共享的(在 Erlang 语言中,这样做是安全的。),包括 Mnesia 的表数据。[7]

起源和许可[编辑]

Mnesia 和 Erlang 都是爱立信计算机科学实验室开发的。他们都是作为开源软件发布的。Mnesia 是基于Mozilla公共许可证的衍生版发布的。[8]他们都是根据开源 Erlang 公共许可证发行的。[9]

ejabberd[编辑]

将 Mnesia 嵌入到基于 Erlang 的 Jabber 守护进程 ejabberd 也是一个选项。[10]

参见[编辑]

引用[编辑]

  1. ^ Håkan Mattsson; Hans Nilsson; Claes Wikstrom. Mnesia - 用于电信应用程序的稳健性分布式数据库管理系统 (PDF). 1999. 
  2. ^ Mnesia的目标. Erlang开源项目. 
  3. ^ Mnesia 入门指南. Erlang 开源项目. 
  4. ^ Mnesia 引用手册 (v 4.4.5). Erlang 开源项目. 
  5. ^ 6.17 函数表达式. Erlang 开源项目. 
  6. ^ Gavin Terrill. Erlang's Mnesia - 为高扩展性应用设计的分布式数据库管理系统. InfoQ. 2007年8月20日. 
  7. ^ Mnesia 性能基础. 
  8. ^ 关于Erlang. Erlang开源项目. 
  9. ^ Erlang公共许可证, V 1.1. Erlang开源项目. 
  10. ^ ejabberd 项目主页.