<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Mnesia</id>
	<title>Mnesia - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Mnesia"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Mnesia&amp;action=history"/>
	<updated>2026-07-11T02:35:29Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Mnesia&amp;diff=3002219&amp;oldid=prev</id>
		<title>imported&gt;InternetArchiveBot：​Reformat 1 URL (Wayback Medic 2.5)) #IABot (v2.0.9.5) (GreenC bot</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Mnesia&amp;diff=3002219&amp;oldid=prev"/>
		<updated>2023-09-20T05:54:36Z</updated>

		<summary type="html">&lt;p&gt;Reformat 1 URL (&lt;a href=&quot;/index.php?title=En:User:GreenC/WaybackMedic_2.5&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;En:User:GreenC/WaybackMedic 2.5（页面不存在）&quot;&gt;Wayback Medic 2.5&lt;/a&gt;)) #IABot (v2.0.9.5) (&lt;a href=&quot;/index.php?title=User:GreenC_bot&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:GreenC bot（页面不存在）&quot;&gt;GreenC bot&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{&lt;br /&gt;
Infobox software&lt;br /&gt;
| name                   = Mnesia&lt;br /&gt;
| logo                   = &lt;br /&gt;
| screenshot             = &lt;br /&gt;
| caption                = &lt;br /&gt;
| author                 = [[喬·阿姆斯特朗]], 罗伯.威廉, 丹.古德门德松以及其他人&lt;br /&gt;
| developer              = [[爱立信]]&lt;br /&gt;
| released               =&lt;br /&gt;
| latest release version = 4.15&lt;br /&gt;
| latest release date    = {{release date|2017|07|05}}&lt;br /&gt;
| operating system       = [[跨平台]] &lt;br /&gt;
| platform               = [[跨平台]]&lt;br /&gt;
| language               =&lt;br /&gt;
| programming language   = [[Erlang (programming language)|Erlang]]&lt;br /&gt;
| genre                  = [[关系模型|关系型]] [[数据库管理系统]]&lt;br /&gt;
| license                = Erlang开源许可证&lt;br /&gt;
| website                = {{URL|http://www.erlang.org/doc/man/mnesia.html}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[File:LYME_software_bundle.svg|thumb|300px|&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[LYME (software bundle)]]&amp;#039;&amp;#039;&amp;#039; 基于 [[Erlang (programming language)|Erlang]] 且包含 &amp;#039;&amp;#039;&amp;#039;Mnesia&amp;#039;&amp;#039;&amp;#039;. 它们都是[[自由及开放源代码软件]]]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Mnesia&amp;#039;&amp;#039;&amp;#039;，是使用[[Erlang]]程式語言编写的[[分布式计算|分布式]]、[[实时计算|软实时]][[数据库管理系统]]。它也是作为[[开放电信平台]]的一部分发布的。&amp;lt;ref name=&amp;quot;Mattsson&amp;quot; &amp;gt;{{cite web&lt;br /&gt;
  |title=Mnesia - 用于电信应用程序的稳健性分布式数据库管理系统&lt;br /&gt;
  |url=http://www.erlang.se/publications/mnesia_overview.pdf&lt;br /&gt;
  |format=PDF&lt;br /&gt;
  |year=1999&lt;br /&gt;
  |author1=Håkan Mattsson&lt;br /&gt;
  |author2=Hans Nilsson&lt;br /&gt;
  |author3=Claes Wikstrom&lt;br /&gt;
  |access-date=2018-01-12&lt;br /&gt;
  |archive-date=2021-09-22&lt;br /&gt;
  |archive-url=https://web.archive.org/web/20210922071815/http://erlang.se/publications/mnesia_overview.pdf&lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 描述 ==&lt;br /&gt;
Mnesia 与 Erlang 都是[[爱立信]]公司为与电信相关的软实时[[分布式计算|分布式]]高可用的计算工作而开发的。它既不是为了通用办公型数据处理设计的[[数据库管理系统]]。也无意于替代基于 [[SQL]] 语言的系统。它是为了帮助 Erlang 实现数据管理系统类的数据持久化而存在的。&amp;lt;ref name=&amp;quot;Mnesia, Purpose&amp;quot; &amp;gt;{{cite web&lt;br /&gt;
  |title=Mnesia的目标&lt;br /&gt;
  |url=http://www.erlang.org/doc/apps/mnesia/Mnesia_chap1.html#1&lt;br /&gt;
  |publisher=Erlang开源项目&lt;br /&gt;
  |access-date=2018-01-12&lt;br /&gt;
  |archive-date=2021-06-20&lt;br /&gt;
  |archive-url=https://web.archive.org/web/20210620012733/https://erlang.org/doc/apps/mnesia/Mnesia_chap1.html#1&lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;比起带有SQL的数据库服务器，它与像 [[Berkeley DB]] 这样的嵌入式数据库管理系统更相似。&lt;br /&gt;
&lt;br /&gt;
=== 数据库模型 ===&lt;br /&gt;
表中的“行”代表了包含一个键值以及一个数据域的记录。这条数据域可能是一个包含任意复杂形式的 Erlang 数据结构的[[元组]]。&lt;br /&gt;
&lt;br /&gt;
=== 关系型特性 ===&lt;br /&gt;
数据库模型是关系型的，但它并不是用大家比较熟悉的 SQL 操作的。一个数据库中的多个表可以在互相之间构建联系。&amp;lt;ref name=&amp;quot;Mnesia, Getting started&amp;quot; &amp;gt;{{cite web&lt;br /&gt;
  |title=Mnesia 入门指南&lt;br /&gt;
  |url=http://www.erlang.org/doc/apps/mnesia/Mnesia_chap2.html#2&lt;br /&gt;
  |publisher=Erlang 开源项目&lt;br /&gt;
  |access-date=2018-01-12&lt;br /&gt;
  |archive-date=2021-06-20&lt;br /&gt;
  |archive-url=https://web.archive.org/web/20210620000919/https://erlang.org/doc/apps/mnesia/Mnesia_chap2.html#2&lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mnesia 高可用的一个关键特性就在于数据库中的表可以重新配置，并且可以在节点之间互相迁移。你不仅可以在数据库运行的时候这样操作，甚至还可以在数据库正在读写的时候操作。&lt;br /&gt;
&lt;br /&gt;
=== 编码 ===&lt;br /&gt;
Mnesia 的[[查询语言]]不是 SQL 语言，而是 Erlang 本身。&amp;lt;ref name=&amp;quot;Mnesia, Reference&amp;quot; &amp;gt;{{cite web&lt;br /&gt;
  |title=Mnesia 引用手册 (v 4.4.5)&lt;br /&gt;
  |url=http://www.erlang.org/doc/apps/mnesia/&lt;br /&gt;
  |publisher=Erlang 开源项目&lt;br /&gt;
  |access-date=2018-01-12&lt;br /&gt;
  |archive-date=2022-05-12&lt;br /&gt;
  |archive-url=https://web.archive.org/web/20220512071137/https://www.erlang.org/doc/apps/mnesia/&lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;这也意味着它可以让开发者直接使用 erlang 语言的特性来表达事务，开发者可以仅仅使用一个语言开发一个完整的应用程序。&lt;br /&gt;
&lt;br /&gt;
=== 事务 ===&lt;br /&gt;
Erlang 是[[函数式编程语言]]。Mnesia 正是基于这一点来做到 [[ACID]] [[事务]]的。作为事务运行的函数块仅仅只是一个非常普通的被称为函数对象的 Erlang 构造体。&amp;lt;ref name=&amp;quot;Erlang Fun&amp;quot; &amp;gt;{{cite web&lt;br /&gt;
  |title=6.17 函数表达式&lt;br /&gt;
  |url=http://www.erlang.org/doc/reference_manual/expressions.html#6.17&lt;br /&gt;
  |publisher=Erlang 开源项目&lt;br /&gt;
  |accessdate=2018-01-12&lt;br /&gt;
  |archive-date=2010-06-13&lt;br /&gt;
  |archive-url=https://web.archive.org/web/20100613064301/http://www.erlang.org/doc/reference_manual/expressions.html#6.17&lt;br /&gt;
  |dead-url=no&lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;写成单条 Mnesia 语句为 &amp;lt;code&amp;gt;mnesia:transaction(F)&amp;lt;/code&amp;gt;。 这样一来就可以使源代码变得要比 SQL 的 &amp;lt;code&amp;gt;BEGIN&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;COMMIT&amp;lt;/code&amp;gt; 配对的语法更清晰，同时也避免了在过程中没有关闭事务的问题。&lt;br /&gt;
&lt;br /&gt;
又因为 Erlang 的函数式特性，嵌套事务也非常简单。也可以在多个结点（也就是单独的服务器）里发布事务。以这种方式使用事务可以让语义保持一致，同时也让编写库代码在上下文保持一致的效果。&lt;br /&gt;
&lt;br /&gt;
Mnesia 的一般编码风格是总是使用事务。考虑到性能问题，Mnesia 也支持用户使用“脏操作”来避免使用事务。这些操作虽然是对 [[ACID]] 原子性以及隔离性的妥协，但也提供了大概10倍的吞吐量。&amp;lt;ref name=&amp;quot;InfoQ, scalability&amp;quot; &amp;gt;{{cite journal&lt;br /&gt;
  |title=Erlang&amp;#039;s Mnesia - 为高扩展性应用设计的分布式数据库管理系统&lt;br /&gt;
  |url=http://www.infoq.com/news/2007/08/mnesia&lt;br /&gt;
  |author=Gavin Terrill&lt;br /&gt;
  |date=2007年8月20日&lt;br /&gt;
  |journal=InfoQ&lt;br /&gt;
  |access-date=2018年1月12日&lt;br /&gt;
  |archive-date=2022年4月26日&lt;br /&gt;
  |archive-url=https://web.archive.org/web/20220426002302/https://www.infoq.com/news/2007/08/mnesia/&lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;除此以外，它还提供了将数据存储在内存中的选项，然而这么做会丢失 [[ACID]] 的持久性。&lt;br /&gt;
&lt;br /&gt;
=== 有效执行 ===&lt;br /&gt;
Mnesia 是 LYME web 应用程序栈的一部分。这与 [[LAMP]] 类似，但它是基于 Erlang。用 Erlang实现会带来一个效率上的好处，那就是开发出来的应用程序自始至终是运行在单个虚拟机上的。LYME 充分利用了这一点，因为连 [[Yaws]]web 服务器都是由 Erlang 实现的。&lt;br /&gt;
&lt;br /&gt;
[[地址空间]]在数据与代码之间都是共享的（在 Erlang 语言中，这样做是安全的。），包括 Mnesia 的表数据。&amp;lt;ref name=&amp;quot;Mnesia performance&amp;quot;&amp;gt;{{cite web |title=Mnesia 性能基础 |url=http://blog.ciarang.com/posts/mnesia-performance-basics/ |deadurl=yes |archiveurl=https://archive.today/20121202021715/http://blog.ciarang.com/posts/mnesia-performance-basics/ |archivedate=2012-12-02 |accessdate=2018-01-12 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 起源和许可 ===&lt;br /&gt;
Mnesia 和 Erlang 都是爱立信计算机科学实验室开发的。他们都是作为[[开源软件]]发布的。Mnesia 是基于[[Mozilla公共许可证]]的衍生版发布的。&amp;lt;ref name=&amp;quot;Erlang project&amp;quot; &amp;gt;{{cite web &lt;br /&gt;
  |title=关于Erlang &lt;br /&gt;
  |url=http://www.erlang.org/about.html &lt;br /&gt;
  |publisher=Erlang开源项目 &lt;br /&gt;
  |access-date=2018-01-12 &lt;br /&gt;
  |archive-date=2020-02-22 &lt;br /&gt;
  |archive-url=https://web.archive.org/web/20200222232013/http://www1.erlang.org/about.html &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;他们都是根据开源 Erlang 公共许可证发行的。&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |title=Erlang公共许可证, V 1.1&lt;br /&gt;
  |url=http://www.erlang.org/EPLICENSE&lt;br /&gt;
  |publisher=Erlang开源项目&lt;br /&gt;
  |access-date=2018-01-12&lt;br /&gt;
  |archive-date=2021-11-05&lt;br /&gt;
  |archive-url=https://web.archive.org/web/20211105174538/https://www.erlang.org/EPLICENSE&lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ejabberd ===&lt;br /&gt;
&lt;br /&gt;
将 Mnesia 嵌入到基于 Erlang 的 [[Jabber]] 守护进程 [[ejabberd]] 也是一个选项。&amp;lt;ref name=&amp;quot;ejabberd&amp;quot; &amp;gt;{{cite web&lt;br /&gt;
  |title=ejabberd 项目主页&lt;br /&gt;
  |url=http://www.ejabberd.im&lt;br /&gt;
  |access-date=2022-05-15&lt;br /&gt;
  |archive-date=2022-05-04&lt;br /&gt;
  |archive-url=https://web.archive.org/web/20220504071044/https://www.ejabberd.im/&lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 参见 ==&lt;br /&gt;
{{Portal|Free Software}}&lt;br /&gt;
* [[Riak]]&lt;br /&gt;
* [[Apache Cassandra]]&lt;br /&gt;
* [[Couchbase]]&lt;br /&gt;
* [[CouchDB]]&lt;br /&gt;
* [[LYME (software bundle)]]&lt;br /&gt;
&lt;br /&gt;
== 引用 ==&lt;br /&gt;
{{reflist|30em}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Erlang]]&lt;br /&gt;
[[Category:开源数据库管理系统]]&lt;br /&gt;
[[Category:结构化存储]]&lt;/div&gt;</summary>
		<author><name>imported&gt;InternetArchiveBot</name></author>
	</entry>
</feed>